首页 > 代码库 > 学习Unity
学习Unity
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。
作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。
理解依赖注入:
当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。
.net中微软有一个轻量级的IoC框架Unity,支持构造器注入,属性注入,方法注入
首先我们先下载安装unity
具体实现方法如下所示:
using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;using Microsoft.Practices.Unity;using Microsoft.Practices.Unity.Configuration;namespace UnityDemo{ class Program { static void Main(string[] args) { //创建容器 IUnityContainer container = new UnityContainer(); //注册映射 container.RegisterType<IA, A>();
//得到A的实例 var a = container.Resolve<IA>(); var b = new B(a); b.Method(); Console.ReadKey(); } } public interface IA { void Method(); } public class A : IA { public void Method() { Console.WriteLine("A test "); } } public class B : IA { public IA a; public B(IA a) { this.a = a; } public void Method() { a.Method(); Console.WriteLine("B test"); } }}
配置文件实现方式
配置文件配置
<?xml version="1.0" encoding="utf-8" ?><configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/> </configSections> <unity> <containers> <container name="defaultContainer"> <register type="UnityDemo.IA,UnityDemo" mapTo="UnityDemo.A,UnityDemo" /> </container> </containers> </unity></configuration>
UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) as UnityConfigurationSection; configuration.Configure(container, "defaultContainer");
container.RegisterType<IA, A>();
var a = container.Resolve<IA>();
var b = new B(a);
b.Method();
和所有的 IOC 框架一样,我们可以使用 XML 文件来配置 Unity。建议使用一个单独的 XML 配置文件,因为 app.config/web.config 已经被塞入太多的东西。修改配置的时候既不清晰,也容易出错。
我们新建一个配置文件:Unity.config
配置文件所配置的内容都一样这里就不多说 了
我们来看一下加载配置文件后台代码:
var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "Unity.config" }; var configuration = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); IUnityContainer container = new UnityContainer(); var section = (UnityConfigurationSection)configuration.GetSection("unity"); section.Configure(container, "defaultContainer"); var a = container.Resolve<IA>(); var b = new B(a); b.Method();
这里读取的配置文件默认是程序bin目录下, 所以还有个小小的设置需要注意一下
设置一下你自己定义的配置文件的属性->高级:复制输出到目录选择如果较新则复制
以上就是我初学unity的一些内容如有那些不对的地方还请指出来 大家一起学习!
学习Unity