• IOC容器


    Autofac是比较出名的Ioc容器之一,熟悉Orchard的应该熟知。本文直接介绍autofac用法

    一、开始

    1、NuGet添加或者直接http://code.google.com/p/autofac/wiki/NewInV2

    2、资源:

    http://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac

    http://www.cnblogs.com/wolegequ/tag/autofac/

    使用AutoFac需引用AutoFac.dll.如果想使用XML配置,还需要引用Autofac.Configuration.dll.

    autofac最常用的解耦方式是从构造器或者属性注入实现ioc

    二、用法总括

    1 注册服务 

    RegisterType<T>()//注册类型T

    AsImplementedInterfaces()//表示注册的类型,以接口的方式注册

    Build()//创建一个容器

    var builder=new ContainerBuilder();
    (1)builder.RegisterType<ConsoleLogger>().As<ILogger>();
    (2) builder.RegisterType<A>();
    (3) builder.RegisterType(typeof(A));
    (4) builder.Register(c=>new A(c.Resoler<B>()));
    (4.1)builder.Register(c => new UserSession(DateTime.Now.AddMinutes(25))); //带复杂参数的构造(构造函数的参数不能使用简单的常量定义)
    (5)builder.Registe(c=>new A(){MyB=c.ResolverOptional<B>()}); //属性注入
    (6)根据参数来选择实现的对象

      builder.Register<CreditCard>((c, p) => {

    var accountId = p.Named<string>("accountId");
    if (accountId.StartsWith("9"))
    return new GoldCard(accountId);
    else
    return new StandardCard(accountId);

    (7) 对已存在的单例进行注入 builder.RegisterInstance(MySingleton.Instance).ExternallyOwned();
    (8) builder.RegisterGeneric(typeof(NHibernateRepository<>))
    .As(typeof(IRepository<>))
    .InstancePerLifetimeScope();
    (9) builder.Register<X2>().As<IX>().PreserveExistingDefaults();
    //使用已存在的注册
    (10)builder.RegisterModule(new ConfigurationSettingsReader("autofac"));配置文件注册

    2、ContainnerBuilder创建实例

    1)、InstancePerDependency

    对每一个依赖或每一次调用创建一个新的唯一的实例。这也是默认的创建实例的方式。

    2、InstancePerLifetimeScope

    在一个生命周期域中,每一个依赖或调用创建一个单一的共享的实例,且每一个不同的生命周期域,实例是唯一的,不共享的。

    3、InstancePerMatchingLifetimeScope

    在一个做标识的生命周期域中,每一个依赖或调用创建一个单一的共享的实例。打了标识了的生命周期域中的子标识域中可以共享父级域中的实例。若在整个继承层次中没有找到打标识的生命周期域,则会抛出异常:DependencyResolutionException

    4、InstancePerOwned

    在一个生命周期域中所拥有的实例创建的生命周期中,每一个依赖组件或调用Resolve()方法创建一个单一的共享的实例,并且子生命周期域共享父生命周期域中的实例。若在继承层级中没有发现合适的拥有子实例的生命周期域,则抛出异常:DependencyResolutionException

    5、SingleInstance

    每一次依赖组件或调用Resolve()方法都会得到一个相同的共享的实例。其实就是单例模式。

    6、InstancePerHttpRequest

     在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发。官方文档解释:Share one instance of the component within the context of a single HTTP request.




    1、如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
    2、欢迎各位转载,但是未经作者本人同意,转载文章请在文章页面明显位置标明作者和原文连接,否则保留追究法律责任的权利。
    作者博客: http://www.cnblogs.com/xmai/
  • 相关阅读:
    Python笔记-面向对象编程
    大学课后答案微信小程序项目实践(1)
    用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写
    react基础学习和react服务端渲染框架next.js踩坑
    基于weex的app开发脚手架weexplus学习笔记
    用weexplus从0到1写一个app
    Vue与React两个框架的区别对比
    mpvue学习笔记-之微信小程序数据请求封装
    Flutter/Dart import导入文件关键字总结
    55个提高你CSS开发效率的必备片段(转自:前段日刊)
  • 原文地址:https://www.cnblogs.com/xmai/p/4303440.html
Copyright © 2020-2023  润新知