IOC容器注入

大多数面向对象编程语言,在调用一个类的时候,先要实例化这个类,生成一个对象。如果你在写一个类,过程中要调用到很多其它类,甚至这里的其它类,也要“依赖”于更多其它的类,那么可以想象,你要进行多少次实例化。这就是“依赖”的意思。依赖注入,全称是“依赖注入到容器”, 容器(IOC容器)是一个设计模式,它也是个对象,你把某个类(不管有多少依赖关系)放入这个容器中,可以“解析”出这个类的实例。所以依赖注入就是把有依赖关系的类放入容器(IOC容器)中,然后解析出这个类的实例。

 1 using Autofac;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 
 7 namespace AutoFace
 8 {
 9     class program
10     {
11         static void Main(string[] args)
12         {
13             //RegisterType:这个方法可以往container中注册一种类型或映射关系,当我们需要调用该类型的实例时,
14             //container会自动实例化该类型的对象,无需通过new someName方法实例化对象
15             ContainerBuilder builder = new ContainerBuilder();
16             builder.RegisterType<NSender>();
17             builder.RegisterType<Mike>().As<IEat, ISay>().InstancePerDependency();
18             //构建容器来完成对象解析,通过Resolve获取该类型的实例
19             using (var container = builder.Build())
20             {
21                 container.Resolve<IEat>();
22                 NSender nSender = container.Resolve<NSender>();//通过resolve解析到的实例
23                 nSender.say = container.Resolve<ISay>();//属性注入
24                 nSender.sent();
25                 Console.ReadKey();
26 
27             }
28 
29         }
30     }
31     public class NSender
32     {
33         public IEat Eat;
34         public ISay Say;
35         //构造函数注入
36         public NSender(IEat eat)
37         {
38             this.Eat = eat;
39         }
40         //属性注入
41         public ISay say
42         {
43             set { Say = value; }
44         }
45         public void sent()
46         {
47             Eat.ExecuteEat();
48             Say.ExecuteSay();
49         }
50     }
51     /// <summary>
52     /// 定义一个吃的接口
53     /// </summary>
54     public interface IEat { void ExecuteEat(); }
55     /// <summary>
56     /// 定义一个说的接口
57     /// </summary>
58     public interface ISay { void ExecuteSay(); }
59     /// <summary>
60     /// Mike会吃也会说
61     /// </summary>
62     public class Mike : IEat, ISay
63     {
64         public void ExecuteEat()
65         {
66             Console.WriteLine("执行Eat....");
67         }
68         public void ExecuteSay()
69         {
70             Console.WriteLine("执行Say....");
71         }
72     }
73 
74 }
View Code

猜你喜欢

转载自www.cnblogs.com/zhangzixin/p/9072854.html