IOC--Unity

IOC--控制反转  =》  目的

 DI--依赖注入  =》过程  通过反射的形式将所有需要的对象展示出来

一般情况全局注册随用随取

Unity实例

  1,实例Untiy 容器   2 注册类型   3 获取实例

1              //IUnityContainer container = new UnityContainer();//1 实例化容器
2                     //container.RegisterType<IPhone, AndroidPhone>();//2 注册类型
3                     ////container.RegisterType<AbstractPad, ApplePad>();
4                     //container.RegisterType<ApplePad, ApplePadChild>();
5                     //container.RegisterInstance<AbstractPad>(new ApplePadChild());
6                     //IPhone iphone = container.Resolve<IPhone>();//3 获取实例
7                     //AbstractPad abstractPad = container.Resolve<AbstractPad>();
8                     //ApplePad applePad = container.Resolve<ApplePad>();

 

 

 

 

 

 1  ////既然对象都是从我这里获取的,我的地盘听我的,我就可以做一些扩展管理,生命周期管理
 2                     //IUnityContainer container = new UnityContainer();
 3                     ////默认瞬时生命周期:每次都是构造一个新的
 4                     ////container.RegisterType<AbstractPad, ApplePad>();
 5                     ////container.RegisterType<AbstractPad, ApplePad>(new TransientLifetimeManager());
 6 
 7                     ////全局单例:全局就只有一个该类型实例
 8                     ////非强制性,只有通过容器获取才是单例;项目中一般推荐容器单例而不是自己写单例
 9                     ////container.RegisterType<AbstractPad, ApplePad>(new SingletonLifetimeManager());
10                     ////AbstractPad pad1 = container.Resolve<AbstractPad>();
11                     ////AbstractPad pad2 = container.Resolve<AbstractPad>();
12                     ////Console.WriteLine(object.ReferenceEquals(pad1, pad2));
13 
14                     ////线程单例:同一个线程就只有一个实例,不同线程就是不同实例
15                     //container.RegisterType<AbstractPad, ApplePad>(new PerThreadLifetimeManager());
16                     //AbstractPad pad1 = null;
17                     //AbstractPad pad2 = null;
18                     //AbstractPad pad3 = null;
19 
20                     //Action act1 = new Action(() =>
21                     //                {
22                     //                    pad1 = container.Resolve<AbstractPad>();
23                     //                    Console.WriteLine($"pad1由线程id={Thread.CurrentThread.ManagedThreadId}");
24                     //                });
25                     //var result1 = act1.BeginInvoke(null, null);
26 
27                     //Action act2 = new Action(() =>
28                     //{
29                     //    pad2 = container.Resolve<AbstractPad>();
30                     //    Console.WriteLine($"pad2由线程id={Thread.CurrentThread.ManagedThreadId}");
31                     //});
32                     //var result2 = act2.BeginInvoke(t =>
33                     //{
34                     //    pad3 = container.Resolve<AbstractPad>();
35                     //    Console.WriteLine($"pad3由线程id={Thread.CurrentThread.ManagedThreadId}");
36                     //    Console.WriteLine($"object.ReferenceEquals(pad2, pad3)={object.ReferenceEquals(pad2, pad3)}");
37                     //}, null);
38 
39                     //act1.EndInvoke(result1);
40                     //act2.EndInvoke(result2);
41 
42                     //Console.WriteLine($"object.ReferenceEquals(pad1, pad2)={object.ReferenceEquals(pad1, pad2)}");
43                     ////HierarchicalLifetimeManager 分级容器单例,
44                     ////var childContainer = container.CreateChildContainer();
45 
46                     ////ExternallyControlledLifetimeManager  外部可释放单例
47                     ////PerResolveLifetimeManager  循环引用

 

posted @ 2021-03-04 22:43  YZM_Leo  阅读(98)  评论(0)    收藏  举报