Autofac IoC容器基本使用步骤

Posted jimson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autofac IoC容器基本使用步骤相关的知识,希望对你有一定的参考价值。

原文: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)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(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 ,永远不会释放,如果他里面存在实例.就有可能存在内存泄露问题.

以上是关于Autofac IoC容器基本使用步骤的主要内容,如果未能解决你的问题,请参考以下文章

Autofac

依赖注入容器-- Autofac

IOC容器之Autofac

Autofac IoC依赖注入容器的特点

IoC容器Autofac正篇之类型注册

IoC容器Autofac -- 什么是IoC以及理解为什么要使用Ioc