IOC 详解
1,IOC 是什么
IOC 指的是控制反转 ,他是一种思想。
2,IOC的优缺点
第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。
第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。
第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。
我们大体可以得出这样的结论:一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。最后,特别强调运行效率的项目或者产品,也不太适合引入IOC框架产品,像WEB2.0网站就是这种情况。
2,我们常用的IOC 方法,有DI(依赖注入),还有一种不太常用的是依赖查找
其中依赖注入实现的方式有很多,我们常用的有这几种,分别是微软自带的unity 和autofac
最常见的是我们autofac 中的构造函数注入
这里举例说明一下
1 /// <summary> 2 ///AutoFac依赖注入 3 /// </summary> 4 private void ProurementAutoFac() 5 { 6 //先构建一个容器构造者 7 var builder = new ContainerBuilder(); 8 //指定容器给apicontroller使用 9 builder.RegisterApiControllers(typeof(ProcurementController).Assembly); 10 builder.RegisterApiControllers(typeof(ProcurementtableController).Assembly); 11 //指定类型的关系并设置生命周期 12 builder.RegisterType<ProcurementtableServices>().As<IProcurementtableServices>().SingleInstance(); 13 14 15 Assembly assembly = Assembly.Load("Services"); 16 builder.RegisterTypes(assembly.GetTypes()).Where(c => c.Name.Contains("Service")).AsImplementedInterfaces(); 17 //得到容器 18 var container = builder.Build(); 19 20 GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); 21 }
这里需要注意一下我们写完了方法需要在Application_Start 中调一下
1 /// <summary> 2 /// 构造函数注入 3 /// </summary> 4 /// <param name="_StoreManagement"></param> 5 public StoreManagementController(IStoreManagementServices _StoreManagement) 6 { 7 StoreManagement = _StoreManagement; 8 9 }

浙公网安备 33010602011771号