一、概述
1.什么是IOC
IOC控制反转:
1.在传统开发中,上端依赖(调用/指定)下端对象,会有依赖,比如在传统的三层架构上,BLL层会对DAL层有依赖
2.把对下端对象的依赖转移到第三方容器(工厂+配置文件+反射),可以说简单工厂就是IOC的雏形
3.能够让程序拥有更好的扩展性
说到IOC,还有一个必须要提到的概念:DI也就是依赖注入,可以说DI就是实现IOC的一种方式
2.Unity的使用
首先创建一个控制台程序和一个IDAL层和DAL层,结构如下
1.先看一下BaseDAL和IBaseDAL,代码非常简单
namespace IDAL { public interface IBaseDAL { void Insert(); } }
namespace DAL { public class BaseDAL: IBaseDAL { public void Insert() { Console.WriteLine("Insert"); } } }
2.准备好基础代码,然后开始填坑了
要使用unity,首先得先去nuget一下包
说一下自己遇到得坑,因为要用到配置,记得引用一下 system.configuration,根据网上很多篇博客上说只需要安装unity和unity interception就可以了,
然后这个UnityConfigurationSection死活找不着命名空间,经过自己查找资料,需要引用unity.configuration才可以,引用完,命名空间到是找到了,可是又出现了另外一个错误
经过查资料,发现还是缺少引用了一个包unity.interception.Configuration.引用完就可以了
配置文件如下
<configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/> </configSections> <unity> <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/> <containers> <container name="MyContainer"> <register type="IDAL.IBaseDAL, IDAL" mapTo="DAL.BaseDAL, DAL"/> </container> </containers> </unity> </configuration>
代码如下
static void Main(string[] args)
{
try
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Config\\Unity.Config");//找配置文件的路径
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
//创建容器
IUnityContainer container = new UnityContainer();
//加载到容器
section.Configure(container, "MyContainer");
IBaseDAL baseDAL = container.Resolve<IBaseDAL>();
baseDAL.Insert();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
运行结果
原文地址:https://www.cnblogs.com/y-easy/p/10561125.html