Autofac IoC容器基本使用步骤_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Autofac IoC容器基本使用步骤

Autofac IoC容器基本使用步骤

 2014/10/2 3:02:29  JF.Cao  程序员俱乐部  我要评论(0)
  • 摘要:一.基本步骤:1.设计适合控制反转(IoC)的应用程序2.给应用程序Autofac引用.3.注册组件.4.创建一个Container以备后用.5.从Container创建一个lifetimescope.6.使用这个LifetimeScope来解析组件的实例.二.详细介绍:1.什么是控制反转?控制反转(InversionofControl,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。控制反转还有一个名字叫做依赖注入(DependencyInjection)
  • 标签:使用 步骤

一.基本步骤:

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 ,永远不会释放,如果他里面存在实例.就有可能存在内存泄露问题.

 

上一篇: [深入浅出WP8.1(Runtime)]应用实例——移动截图 下一篇: 没有下一篇了!
发表评论
用户名: 匿名