AutoFac实现.Net控制反转

一.控制反转简介

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

二.AutoFac出场
1.解决的问题-依赖

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

  1. 要用不同的实现替换依赖项,必须修改类。
  2. 如果 具有依赖关系,则必须由类对其进行配置。 在具有多个需要依赖的类的大型项目中,配置代码在整个应用中会变得分散。
  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<YourObj>().As<IYourInterface>();
      builder.RegisterType<YourObj2>().As<IYourInferface2>();//组件单个组册
      builder.RegisterModule(new ConfigurationSettingsReader("autofacregist", registFile);//组件统一注册,参数autofacregist为组件组册所在的命名部分,registFile为组件配置路径,配置内容请看下文
      Container = builder.Build();

组件统一配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<autofac>
  <components>
    <component type="Test.BLL.SysLogger,Test.BLL" service="Test.IBLL.ISysLogger,Test.IBLL" instance-scope="single-instance" />
    <component type="Test.BLL.GlobalSettingsBLL,Test.BLL" service="Test.IBLL.IGlobalSettingsBLL,Test.IBLL" instance-scope="single-instance"/>
  </components>
</autofac>
5.AutoFac引用

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

6.应用tips

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

      using (var scope = Container.BeginLifetimeScope())
      {
        var writer = scope.Resolve<IYourInterface>();
        writer.WriteDate();
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值