• 【转】ASP.NET MVC Autofac依赖注入


    1.基本注入

    首先我们要构造一个容器,代码如下:

    //第一步: 构造一个AutoFac的builder容器
    ContainerBuilder builder = new ContainerBuilder();

    第二步..注入自己需要的服务和继承关系.  类似下面:

    //注入仓储
    builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)).InstancePerLifetimeScope();

    嗯..这里解释一下是什么意思..

    RegisterGeneric 注入你的服务类,后面的As则是你服务类继承的接口.

    InstancePerLifetimeScope为你注入的这个服务的生命周期.(注:生命周期我们后面讲)

    2.控制器注入

    采用属性注入的方式,注入控制器

    //注入控制控制器
    builder.RegisterControllers(assemblys.ToArray()).PropertiesAutowired().InstancePerLifetimeScope();

    嗯..这里面的assemblys.ToArray().. 就是一些你要注入到控制器里面的程序集..

    嗯 我是直接通过统一接口 然后批量注入..你们自己随意..

    PropertiesAutowired()的意思就是采用属性注入的方式

    3.特性注入

    我们在使用MVC的时候,肯定会用到特性..肯定会有一些自己定义的特性..那么这些特性里面要用到相关的服务,该怎么注入呢..如下:

    //注入特性
     builder.RegisterFilterProvider();

    是的.. 你没看错..MVC里面就一句话就行了..特性里面就可以取到想要的服务了..(注:WebAPI不可以,具体请查官方文档)

    4.生成容器并提供给MVC

    代码如下:

    //通过容器配置生成容器. 
     var container = builder.Build();
     //提供给MVC
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

    5.一些杂七杂八

    //注入类用这个
    builder.RegisterType(要注入的类型)
    //注入泛型类用这个
    builder.RegisterGeneric(要注入的类型)

    6.关于生命周期

    InstancePerDependency()

    瞬时,嗯..就是服务对于每次请求都会返回单独的实例

    InstancePerLifetimeScope()

    基于线程或者请求的单例..嗯 就是一个请求 或者一个线程 共用一个

    SingleInstance()

    嗯..没别的 就是单例.. 整个项目公用一个

    InstancePerRequest()

    嗯..针对MVC的,或者说是ASP.NET的..每个请求单例

  • 相关阅读:
    php面试专题---16、MySQL创建高性能索引考点
    php面试专题---Mysql索引类型、介绍及优点
    php面试专题---Mysql索引原理及SQL优化
    北风设计模式课程---责任链模式 总结
    黑马lavarel教程---2、获取用户输入
    php面试专题---15、MySQL数据库基础考察点
    北风设计模式课程---外观模式、代理模式和中介者模式的区别
    legend3---1、meedu安装
    mysql中utf8和utf8mb4区别
    Struts2基于注解的Action配置
  • 原文地址:https://www.cnblogs.com/ystao/p/8643607.html
Copyright © 2020-2023  润新知