Unity是微软团队开发的一个轻量级,可扩展的依赖注入容器,为松散耦合应用程序提供了很好的解决方案,支持构造器注入,属性注入,方法注入。
同样根据控制反转IOC与依赖注入DI中的例子
Unity的实现如下:
- IUnityContainer container = new UnityContainer();
- container.RegisterType<IDal,OracleDal>();
- var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。
- dal.save();
1、创建容器
- IUnityContainer container = new UnityContainer();
2、注册映射
@H_301_36@container.RegisterType<IDal,OracleDal>();
b) 通过配置方式注册映射:
RegisterType有以下几个重载方法:
RegisterType<TFrom,TTo>( )
RegisterType<>(LifetimeManagerlifetime)
RegisterType<>(StringnameT)
RegisterType(Typefromtot)
RegisterType<TFrom,TTo>( )
RegisterType<>(LifetimeManagerlifetime)
RegisterType<>(StringnameT)
RegisterType(Typefromtot)
- UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
- config文件配置如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- <section name="unity"
- type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
- </configSections>
- <unity>
- <containers>
- <container>
- <types>
- <type
- type="UnityDemo.IDal,UnityDemo"
- mapTo="UnityDemo.OracleDal,UnityDemo" />
- </types>
- </container>
- </containers>
- </unity>
- </configuration>
- IUnityContainer container = new UnityContainer();
- UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
- section.Configure(container);
- var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。
- dal.save();
3、获取对象实例
- var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。
- var dals = container.ResolveAll<IDal>();
- foreach(IDal dal in dals)
- {
- dal.save();
- }
结果:
参考文档: