• ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)


    前言

    IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法..

    一直憋着没写ASP.NET Core的文章..还是怕误导大家..

    今天这篇也不是讲Core

     前面写了C#开发移动应用系列  就第一篇和最后一篇上了最多推荐 - -  也许大家确实不看好吧..

    算了..废话不多说.开始今天的东西吧..

     本篇文章不讲为何我们要用IOC..只讲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的..每个请求单例

     到此就结束了.

    最后

    嗯..内容不多,胜在实用..分享一下吧, 有问题的地方希望大神指正一下,也顺便是自己的一个记录吧..

  • 相关阅读:
    剑指offer-删除链表中重复的结点
    剑指offer-矩阵中的路径
    剑指offer-旋转数组的最小数字
    剑指offer-用两个栈实现队列
    剑指offer-二叉树的下一个节点
    剑指offer-从尾到头打印链表
    SSM整合所需jar包
    剑指offer-树中两个节点的最低公共祖先
    剑指offer-判断是否是平衡二叉树
    剑指offer-二叉树的深度
  • 原文地址:https://www.cnblogs.com/GuZhenYin/p/7132650.html
Copyright © 2020-2023  润新知