ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.net core 3.1 autofac(webapi / mvc 通过)

2020-09-13 20:02:21  阅读:248  来源: 互联网

标签:webapi core autofac builder System var using 加载


之前在.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。

 

标签:webapi,core,autofac,builder,System,var,using,加载
来源: https://www.cnblogs.com/PrintY/p/13662837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有