依赖注入容器Unity介绍

前端之家收集整理的这篇文章主要介绍了依赖注入容器Unity介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Unity是微软团队开发的一个轻量级,可扩展的依赖注入容器,为松散耦合应用程序提供了很好的解决方案,支持构造器注入,属性注入,方法注入。


同样根据控制反转IOC与依赖注入DI中的例子

  1. interface IDal
  2. {
  3. void save();
  4. }
  5. class sqlServerDal : IDal
  6. {
  7. public void save()
  8. {
  9. Console.WriteLine("sqlServer save.");
  10. }
  11. }
  12. class OracleDal : IDal
  13. {
  14. public void save()
  15. {
  16. Console.WriteLine("Oracle save.");
  17. }
  18. }

Unity的实现如下:

  1. IUnityContainer container = new UnityContainer();
  2. container.RegisterType<IDal,OracleDal>();
  3. var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。
  4. dal.save();


1、创建容器

  1. IUnityContainer container = new UnityContainer();

2、注册映射

a) 代码方式注册映射:
@H_301_36@container.RegisterType<IDal,OracleDal>();

RegisterType有以下几个重载方法
RegisterType<
TFrom,TTo>( )
RegisterType<
>(LifetimeManagerlifetime)
RegisterType<
>(StringnameT)
RegisterType(Type
fromtot)

b) 通过配置方式注册映射:
  1. UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
  1. config文件配置如下:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <configSections>
  4. <section name="unity"
  5. type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
  6. </configSections>
  7. <unity>
  8. <containers>
  9. <container>
  10. <types>
  11. <type
  12. type="UnityDemo.IDal,UnityDemo"
  13. mapTo="UnityDemo.OracleDal,UnityDemo" />
  14. </types>
  15. </container>
  16. </containers>
  17. </unity>
  18. </configuration>

配置方式完整代码
  1. IUnityContainer container = new UnityContainer();
  2. UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
  3. section.Configure(container);
  4. var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。
  5. dal.save();


3、获取对象实例

  1. var dal = container.Resolve<IDal>();//这是得到OracleDal的实例。

可以通过方法ResolveAll来得到所有注册对象的实例:
  1. <types>
  2. <type
  3. type="UnityDemo.IDal,UnityDemo" name="oracle"
  4. mapTo="UnityDemo.OracleDal,UnityDemo" />
  5. <type
  6. type="UnityDemo.IDal,UnityDemo" name="sqlserver"
  7. mapTo="UnityDemo.sqlServerDal,UnityDemo" />
  8. </types>
  1. var dals = container.ResolveAll<IDal>();
  2. foreach(IDal dal in dals)
  3. {
  4. dal.save();
  5. }

结果:




参考文档:

http://unity.codeplex.com

猜你在找的设计模式相关文章