zoukankan      html  css  js  c++  java
  • .net core 3.1 autofac(webapi / mvc 通过)

    之前在.net core 3.1 的webapi项目中使用过autofac框架,但是没做记录。考虑到vue的seo问题,所以觉得mvc项目还是有必要研究下的,在这分享下mvc下autofac的使用。

    1、NuGet安装依赖包

    Autofac
    Autofac.Extensions.DependencyInjection

     2、配置

    2.1 Startup.cs中重写ConfigureContainer方法

    1 public void ConfigureContainer(ContainerBuilder builder)
    2 {
    3     builder.RegisterModule<AutofacRegister>();
    4 }

    其中AutofacRegister.cs如下

     1 using System.IO;
     2 using System.Linq;
     3 using System.Reflection;
     4 
     5 namespace Y.MVC
     6 {
     7     /// <summary>
     8     /// autofac配置类
     9     /// </summary>
    10     public class AutofacRegister : Autofac.Module
    11     {
    12         protected override void Load(ContainerBuilder builder)
    13         {
    14             #region 
    15             var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;//获取项目路径
    16             var servicesDllFile = Path.Combine(basePath, "Y.MVC.Service.dll");//获取注入项目绝对路径
    17             var assemblysServices = Assembly.LoadFile(servicesDllFile);//直接采用加载文件的方法
    18             builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces();
    19 
    20             var repositoryDllFile = Path.Combine(basePath, "Y.MVC.IService.dll");
    21             var repositoryServices = Assembly.LoadFile(repositoryDllFile);//直接采用加载文件的方法
    22             builder.RegisterAssemblyTypes(repositoryServices).AsImplementedInterfaces();
    23             #endregion
    24 
    25             #region 
    26             var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()
    27             .Where(type => typeof(Microsoft.AspNetCore.Mvc.ControllerBase).IsAssignableFrom(type)).ToArray();
    28             builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
    29             #endregion
    30         }
    31     }
    32 }

    这里要说一下,我看了网上很多很多的教程,很多都是挨个服务类加载,我这个是通过DLL加载整个程序集中的接口类,但是会有解耦的问题,如果发生解耦问题,要重新生成下DLL(确定bin下包含要注入的服务类的程序集)。然后我这边推荐使用属性注入,构造函数注入本身并不复杂,但是再加上日志等杂七杂八的,会导致构造函数过于庞大。

    2.2 Program.cs中修改CreateHostBuilder方法

    .UseServiceProviderFactory(new AutofacServiceProviderFactory())

    然后这块重点说一下哈,一定要注意这段代码的位置!除此之外,还需要修改一个地方,ConfigureServices方法

    3、Controller中使用

     这就没啥说的了,属性注入成功,直接使用就行了,注意下声明的使用需要public。

  • 相关阅读:
    JavaScript中的数据类型转换
    JavaScript中的变量
    set_uid set_gid stick_bit 软硬链接
    chmod、chown、umask、lsattr/chattr
    环境变量、cp、mv、cat 等命令
    相对和绝对路径 mkdir cd rm 等命令
    linux 系统 目录,以部分及相关命令
    单用户模式 和救援模式 、以及相互登陆(免密)
    putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
    vmware NAT 网络出现问题的解决方法
  • 原文地址:https://www.cnblogs.com/PrintY/p/13662837.html
Copyright © 2011-2022 走看看