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         }

 

posted @ 2020-09-03 19:09  伊莱文  阅读(1000)  评论(0)    收藏  举报