> 文档中心 > AutoFac实现.Net控制反转

AutoFac实现.Net控制反转


一.控制反转简介

涉入AutoFac,你应弄清楚什么是控制反转。控制反转(Inversion Of Control)顾名思义你可能会一头雾水,控制什么,反转什么?其实这里的控制,指的是组件实例之间的依赖关系,反转就是将依赖关系交给上级接口,实例化哪个对象让外部决定。

二.AutoFac出场

1.解决的问题-依赖

在这里插入图片描述
如上图所示,CD播放器因为有CD才能工作,所以称CD播放器依赖于CD。Microsoft官网上有3点分析依赖所带来的问题,我觉得概括得很好,在这里引用一下:

要用不同的实现替换依赖项,必须修改类。如果 具有依赖关系,则必须由类对其进行配置。 在具有多个需要依赖的类的大型项目中,配置代码在整个应用中会变得分散。这种实现很难进行单元测试。 应用应使用模拟或存根 MyDependency 类,该类不能使用此方法。

2.控制反转模式解决方案

依照开放关闭原则,对改变的部分进行封装,代码中抽象出连接池接口,对接口进行编程,而连接池实例由代码外部配置。

3.AutoFac实现思路

  1. 想要在你的app里构建控制反转的架构
  2. 添加Autofac的引用
  3. 在应用程序startup中…
  4. 创建一个ContainerBuilder
  5. 注册组件 构建并保存接下来需要用到的容器
  6. 在程序执行时…
  7. 从容器里创建一个生命期范围
  8. 使用这个生命周期去溶解组件的实例

4.AutoFac中的模型

组件就像溶质,用装了水的容器去溶解它们,构造顺序为:
容器构造器(注册组件,构造容器)=》 容器(用的时候溶解组件)=》组件,
代码如下:

      var builder = new ContainerBuilder();      builder.RegisterType().As();      builder.RegisterType().As();//组件单个组册      builder.RegisterModule(new ConfigurationSettingsReader("autofacregist", registFile);//组件统一注册,参数autofacregist为组件组册所在的命名部分,registFile为组件配置路径,配置内容请看下文      Container = builder.Build();

组件统一配置文件如下:

            

5.AutoFac引用

在.net领域,AutoFac是IoC最好的实现。可以使用NutGet检索安装,也可以去Auto官网下载

6.使用tips

1.生命周期
容器本身就是一个生命周期
如果直接从容器中溶解组件,太多东西在容器中,你可能会因一些无所事事的组件等待处理而告终,出现内存溢出的问题。
取而代之的是:
从容器中创建一个子生命周期,并溶解它。在这个子生命周期的组件,当此子容器被处理时,一切都被处理掉。

      using (var scope = Container.BeginLifetimeScope())      { var writer = scope.Resolve(); writer.WriteDate();      }

 

开发者涨薪指南 AutoFac实现.Net控制反转 48位大咖的思考法则、工作方式、逻辑体系