依赖注入容器Unity介绍

Unity是微软团队开发的轻量级依赖注入容器,用于实现松散耦合应用。支持构造器、属性和方法注入,通过创建容器、注册映射和获取对象实例来操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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

interface IDal  
    {  
        void save();  
    }  
    class SqlServerDal : IDal  
    {  
        public void save()  
        {  
            Console.WriteLine("SqlServer save.");  
        }  
    }  
    class OracleDal : IDal  
    {  
        public void save()  
        {  
            Console.WriteLine("Oracle save.");  
        }  
    }  

Unity的实现如下:

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


1、创建容器

IUnityContainer container = new UnityContainer();  

2、注册映射

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

RegisterType有以下几个重载方法:
RegisterType<
TFromTTo>( )
RegisterType<
TFromTTo>(LifetimeManager lifetime)
RegisterType<
TFromTTo>(String name)
RegisterType<
TFromTTo>(String name, LifetimeManager lifetime)
RegisterType<
T>(LifetimeManager lifetime)
RegisterType<
T>(String name, LifetimeManager lifetime)
RegisterType(Type 
from, Type to)
RegisterType(Type 
from, Type to, String name)
RegisterType(Type 
from, Type to, LifetimeManager lifetime)
RegisterType(Type 
from, Type to, String name, LifetimeManager lifetime)
RegisterType(Type 
t, LifetimeManager lifetime)
RegisterType(Type 
t, String name, LifetimeManager lifetime


b) 通过配置方式注册映射:
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的实例。 

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

结果:




参考文档:

http://unity.codeplex.com




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值