Autofac IoC容器基本使用步骤

一.基本步骤:

1.设计适合控制反转(IoC)的应用程序

2.给应用程序Autofac 引用.

3.注册组件.

4.创建一个Container以备后用.

5.从Container创建一个 lifetime scope .

6.使用这个Lifetime Scope 来解析组件的实例.

二.详细介绍:

1.什么是控制反转?

  控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。IoC就是IoC,不是什么技术,与GoF一样,是一种 设计模式

  Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了;而采用了IoC之后,我们的就把创建接口的一个实例交给IoC容器.从而实现了解耦.

所以我们在编程的时候的原则之一就是"针对接口编程",这里的"接口"不是指一要是个接口类型,它可以是C#语言中的接口类型,也可以一个具体的父类.

   public interface  ILcService
    {
        string ServiceName { get; }
    }

    public  class LcService:ILcService
    {

        public string ServiceName
        {
            get;
            set;
        }
    }

2.怎么添加Autofac的引用?

1)我们可以到Autofac官网下载dll文件,然后在Visualstudio的项目中添加引用

2)也可以使用NuGet 安装autofac包.

3.怎样注册组件?

  在Autofac中,我们使用一个ContainerBuilder类的实例来注册我们的我们的组件. Autofac提供了Register方法家族,方便我们注册组件.

            ContainerBuilder builder = new ContainerBuilder();

            builder.RegisterType<ILcService>().As<LcService>().InstancePerDependency();

4.创建一个Container以备后用.
直接调用ContainerBuilder类实例的build()即可.

    var container = builder.Build();

5.创建一个Lifetime Sope.

      var lifetimescope = container.BeginLifetimeScope();

6.得到我们需要的的实例.

        ILcService service = lifetimeScope.Resolve<ILcService>();     

  我们可以在最后看的出来,使用了IoC之后,只需要知道接口或者说是父类即可,这就符合设计模式中要求的"针对接口编程,不针对具体类编程".创建实例也不是使用New关键字去创建一个实例,创建实例的工作交给了IoC容器,这个我们可以在IoC容器中随便的替换具体的实现类了.

还有个问题及时.为什么不直接从Container中直接解析出具体的实例,而要创建一个LifetimeScope,再从它里面解析? 这个就是考虑到内存泄露问题.  LifetimeScope用完了,就释放了,它里面的实例也跟着释放了,就不会出现内存泄露,Container是个root ,永远不会释放,如果他里面存在实例.就有可能存在内存泄露问题.

时间: 10-02

Autofac IoC容器基本使用步骤的相关文章

Autofac IoC容器基本使用步骤【1】

原文:http://www.bkjia.com/Asp_Netjc/888119.html 一.基本步骤: 1.设计适合控制反转(IoC)的应用程序 2.给应用程序Autofac 引用. 3.注册组件. 4.创建一个Container以备后用. 5.从Container创建一个 lifetime scope . 6.使用这个Lifetime Scope 来解析组件的实例. 二.详细介绍: 1.什么是控制反转? 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向

Spring技术内幕——Spring Framework的IOC容器实现(一)

一.SpringIOC容器概述 IOC容器和依赖反转的模式 在面向对象的系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上.这些依赖关系可以通过把对象的依赖注入交给框架IOC容器来完成.他可以再解耦代码的同时提高了代码的可测试性. 依赖控制反转的实现由很多种方式,在Spring中,IOC容器是实现这个模式的载体,他可以再对象生成或者初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖.这种依赖注入是可以递归的,对象被逐

SpringBoot启动流程分析(四):IoC容器的初始化过程

SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四

Ioc容器Autofac系列(1)-- 初窥

前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Ioc容器是用来做什么的?用了有什么好处?我相信如果不明白这两点就很难敞开心扉接受Ioc容器. 传统解耦设计的弊端 为方便描述,举个日志的栗子.我简化实现,一个Log类,一个SaveLog方法.如果其他类想拥有记日志功能,那么只需在内部包含一个Log类型的变量: public class Log  {    

Ioc容器Autofac系列(1)-- 初窥(转)

前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Ioc容器是用来做什么的?用了有什么好处?我相信如果不明白这两点就很难敞开心扉接受Ioc容器. 传统解耦设计的弊端 为方便描述,举个日志的栗子.我简化实现,一个Log类,一个SaveLog方法.如果其他类想拥有记日志功能,那么只需在内部包含一个Log类型的变量: 双击代码全选 1 2 3 4 5 6 7 8

String框架搭建的基本步骤,及从IOC容器中获取Bean

Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help->Instal New Software->点击add,找到该压缩包->选择 Name下面选择带有 /Spring IDC 的多选框->取消最下边的选框  contact all...->next...->finish: 建立一个java project,在工程目录下(day-1

Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac(转)

经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofac官网下载来引入类库.个人推荐前者,因为从VS2010开始,已内集可视化的NuGet功能,使用起来非常方便.如下图所示: 这是vs2012的界面,点击"Manage NuG

IoC容器Autofac(一)

依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖. Robert Martin大师提出了面向对象设计原则----依赖倒置原则: A. 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. B. 抽象不能依赖于具体,具体依赖于抽象. 理解:A.上层是使用者,下层是被使用者,这就导致的结果是上层依赖下层了,下层变动了,自然就会影响到上层了,导致系统不稳定,甚至是牵一发而动全身.那怎么减少依 赖呢?就是上层和下层都去依赖另一个抽象,这个抽象比较稳定,整个就来说就比较稳定了. B

ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)

前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器) ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入) ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截) 正文 上