Unity Ioc框架简单例子

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。
作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。
理解依赖注入:

引入Unity:http://unity.codeplex.com/

或者VS GuGet中引用

 

 

Dependency 属性注入需要填特性
InjectionMethod 方法注入需要添加特性

    public interface IA { }
    public interface IB { }
    public interface IC { }
    public interface ID { }

    public class A : IA
    {
        public IB B { get; set; }
        [Dependency]
        public IC C { get; set; }
        public ID D { get; set; }

        public A(IB b)
        {
            this.B = b;
        }
        [InjectionMethod]
        public void Initialize(ID d)
        {
            this.D = d;
        }
    }
    public class B : IB { }
    public class C : IC { }
    public class D : ID { }

代码方式注册:

 

 static void Main(string[] args)
        {
            // http://unity.codeplex.com/
              
             IUnityContainer container = new UnityContainer(); //注册映射   
             container.RegisterType<IA, A>();
             container.RegisterType<IB, B>();
             container.RegisterType<IC, C>();
             container.RegisterType<ID, D>();
              
            //得到A的实例  
             A a = (A)container.Resolve<IA>();
              
             Console.WriteLine("a.B == null ? {0}", a.B == null ? "Yes" : "No");
             Console.WriteLine("a.C == null ? {0}", a.C == null ? "Yes" : "No");
             Console.WriteLine("a.D == null ? {0}", a.D == null ? "Yes" : "No");

            Console.Read();
        }

 

配置文件方式注册:

<configuration>
  <configSections>
    <section name="unity"
        type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <containers>
      <container>
        <register type="Client.IA, Client" mapTo="Client.A, Client"/>
        <register type="Client.IB, Client" mapTo="Client.B, Client"/>
        <register type="Client.IC, Client" mapTo="Client.C, Client"/>
        <register type="Client.ID, Client" mapTo="Client.D, Client"/>
      </container>
    </containers>
  </unity>
   
</configuration>

  

 static void Main(string[] args)
        {
            // http://unity.codeplex.com/ 
             IUnityContainer container = new UnityContainer();
             UnityConfigurationSection configuration = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
             configuration.Configure(container);
             A a = (A)container.Resolve<IA>();
  
             Console.WriteLine("a.B == null ? {0}", a.B == null ? "Yes" : "No");
             Console.WriteLine("a.C == null ? {0}", a.C == null ? "Yes" : "No");
             Console.WriteLine("a.D == null ? {0}", a.D == null ? "Yes" : "No");

            Console.Read();
        }

  

转载于:https://www.cnblogs.com/dragon-L/p/5124872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值