• Autofac 学习


    之前用Ninject,最近因工作需要开始研究Autofac,其实两者都差不多,只是实现方法上有些区别,原理都一样,下面总结一下基础知识。

    Autofac是一款IOC框架,它很轻量级性能非常高。(先吹捧一下,提高学习积极性)

    控制反转(IOC  Inverse of Control) 调用者不再创建被调用者的实例,由autofac框架实现(容器创建)所以成为控制反转。比如你用抽象引用(接口或抽象类)指向具体实现类的实例,你要创建实例(这是一个多态的概念),但有了IOC之后,你不用操心这些事了,由IOC框架来干,你只管拿着接口引用来用就成。

    依赖注入(DI Dependence  injection) 容器创建好实例后再注入调用者称为依赖注入。 当然,上边你用着是方便了,前提是需要完成框架的一些简单的操作,这些操作就是依赖注入。即建立接口或抽象类与实现之间的关联关系。

    安装 Autofac   install-package Autofac

    1.关键方法说明

    (1)扫描类型 RegisterAssemblyTypes(接受1个或多个程序集的数组),程序集必须是public

       (1.1)过滤类型 Where()

         如:   builder.RegisterAssemblyTypes(Assembly.LoadFile(servicesDllFile))

                 .Where(t=>t.Name.EndsWith("Services"))

      (1.2)排除类型 Except()

       如:   builder.RegisterAssemblyTypes(Assembly.LoadFile(servicesDlFile)

                 .Except<MyType>(ct=>ct.As<ISpecial>().SingleInstance());

       AsImplementedInterfaces() :表示注册的类型,以接口的方式注册,但不包括IDisposable()接口

       builder.RegisterAssemblyTypes(Assembly.LoadFile(servicesDllFile))

       .Where(t=>t.Name.EndWith("Repository"))

       .AsImplementedInterfaces();

      AsClosedTypesOf(open) 可分配给注册类一个接近开放反省类型的实例

      builder.RegisterAssemblyTypes(Assembly.LoadFile(ServiceDllFile))

      .AsClosedTypesOf(type(IRepository))

      AsSelf  默认,注册类型本身--当重写其他服务默认规范时非常有用

      builder.RegisterAssemblyTypes(Assembly.LoadFile(serviceDllFile))

      .AsImplementedInterfaces()

      .AsSelf();

    2.扫描模块 RegisterAssemblyModules()注册方法,它通过Autofac模块提供的程序集扫描,创建模块实例,然后使用当前container builder注册他们,使用

    System.Web.Compilation.BuilderManager中的GetReferecedAssemblies()方法,会得到一个引用程序集列表.

    var assemblies=BuilderManager.GetReferencedAssemblies().Cast<Assembly>();

    注入方法1

    var builder=new ContainerBuilder();

    builder.RegisterType<TestService>();

    builder.RegisterType<TestDAL>().As<ITestDAL>()

    return builder.Builder();

    方法2 为了统一管理IOC相关代码,并避免在底层类库中到处引用Autofac这个第三方组件,定义了一个专门用于管理需要依赖注入的接口与实现类的空接口IDependency。

        public interface IDependency
        {
        }

    这个接口没有任何方法,不会对系统的业务逻辑造成污染,所以需要进行以来注入的接口,都要集成这个空接口。

     https://www.cnblogs.com/liupeng/

     https://my.oschina.net/u/4362986/blog/3852607

     

      

  • 相关阅读:
    为当前用户创建cron服务
    PHP程序员的简单运维
    mysql事件学习
    ubantu16.04服务器错误提示没有安装php_fileinfo扩展
    XAMPP配置vhosts多站点/绝对正确
    yii2框架获取刚插入数据库的id (原创)
    ajax详解
    Git密钥生成步骤SSH Key
    jquery禁用select和取消禁用
    a标签实现不跳转点击
  • 原文地址:https://www.cnblogs.com/sundh1981/p/13925970.html
Copyright © 2020-2023  润新知