.net core 杂记:用Autofac替换内置容器

官方建议使用内置容器,但有些功能并不支持,如下:
  • 属性注入
  • 基于名称的注入
  • 子容器
  • 自定义生存期管理
  • Func<T> 支持

所以可以使用其他第三方IOC容器,如Autofac,下面为学习使用记录

一、首先准备了一个接口和其实现类

public interface ITestService
{string ShowMsg();
}

 

public class TestService: ITestService
{public string ShowMsg(){return "test123";}
}

 

二、安装Nuget 包

Autofac
Autofac.Extensions.DependencyInjection

 

三、在 Startup.ConfigureServices 中配置容器

注:使用第三方容器,Startup.ConfigureServices 必须返回 IServiceProvider。

  第一种方式,使用AutofacModule配置文件,原来代码修改为:

public IServiceProvider ConfigureServices(IServiceCollection services)
{services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);// Add Autofacvar containerBuilder = new ContainerBuilder();containerBuilder.RegisterModule<AutofacModule>();containerBuilder.Populate(services);var container = containerBuilder.Build();return new AutofacServiceProvider(container);
}

AutofacModule类如:

public class AutofacModule: Module
{protected override void Load(ContainerBuilder builder){builder.RegisterType<TestService>().As<ITestService>();
     //...........} }

 

  第二种方式

Startup.ConfigureServices如下修改

public IServiceProvider ConfigureServices(IServiceCollection services)
{services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);// Add Autofacvar containerBuilder = new ContainerBuilder();//containerBuilder.RegisterModule<AutofacModule>();

   //自动注册该程序集下的所有接口
//netcore_autofac 为程序集命名空间//InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例//SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;//InstancePerDependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象;containerBuilder.RegisterAssemblyTypes(Assembly.Load("netcore_autofac")).AsImplementedInterfaces().InstancePerLifetimeScope();containerBuilder.Populate(services);var container = containerBuilder.Build();return new AutofacServiceProvider(container); }

 

其他Autofac在.net core 的使用,请参考官方文档:https://docs.autofac.org/en/latest/integration/aspnetcore.html

转载于:https://www.cnblogs.com/qiuguochao/p/10970672.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux shell 获取本机ip 写入文件

本机IP获取 /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk {print $2}|tr -d "addr:" k8s 获取容器所造node节点的ip container_netifconfig eth0 |grep "inet" |grep -v "inet6"| awk {print $2}|cut -d . -f 3node_ipet…

程序员必看!Android面试10大知识点总结宝典助你通关!年薪50W

起由 搞了7年多Android了&#xff0c;前阵子面试了一家不大不小的公司。公司不大&#xff0c;面试官架子还不小&#xff0c;一副目中无人高高在上的样子&#xff0c;搞得好像我一万个想进他们公司、我进不了他们公司我全家都得喝西北风一样。搞得我是真的郁闷&#xff1a;现在…

Odoo免费开源企业信息化平台助力企业成功

企业信息化变革之路 信息孤岛的真实由来 打开百度App&#xff0c;看更多图片左边为当下企业现状&#xff0c;右边为Odoo的整体 企业信息孤岛的严重性&#xff0c;来自于企业的自身高速发展&#xff0c;企业以销售为生命主题围绕着客户会搭建一系列相关的信息化系统&#xff0c;…

group count聚集函数无法直接统计出分组后的总记录数

数据库Group By类型语句统计记录条数 最近做一个分页查询查询的数据采用了group by来完成数据的查询处理&#xff0c;需要统计分组后的数据总数发现count(*) 聚集函数无法直接统计出分组后的总记录数。 查询SQL&#xff1a; 复制代码 SELECT count(*) FROM employeeexam, ex…

系统盘点Android开发者必须掌握的知识点,含小米、腾讯、阿里

什么是Flutter? Flutter是Google推出并开源的移动应用程序&#xff08;App&#xff09;开发框架&#xff0c;主打跨平台、高保真、高性能。其采用Dart&#xff08;官网、中文网&#xff09;语言作为开发语言&#xff0c;开发者可以通过Dart语言开发Flutter App&#xff0c;一…

java 堆和栈的区别

1&#xff0c;在栈中存放的是基本类型变量和对象的引用变量&#xff0c;当一段代码定义一个变量时&#xff0c;java 就在栈内为这个变量分配内存空间&#xff0c;当超过变量的作用域时&#xff0c;java会自动回收分配的内存。局部变量在栈内存 2&#xff0c;堆内存放的是new创建…

Web For Pentester -- File Upload

文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。 文件上传导致的常见安全问题&#xff1a; 上传文件是Web脚本语言&#xff0c;服务器的Web容器解释并执行了用户上传的脚本&#xff0c;导致代码执行&#xff1b; 上…

组件化与插件化的差别在哪里?附面试题答案

前言 本人水平有限&#xff0c;此文针对于自认为技术实力对标阿里P7&#xff0c;百度T5或者以下的读者&#xff0c;如果是大佬不小心点进来了&#xff0c;可以自行点x略过。文内并不会出现每一家公司的面试过程细节&#xff0c;主要目的在于帮助大家怎么在像我一样菜的情况下在…

json转成类对象转成xml全过程

类对象 XStreamAlias("ROOT") public class ProjectBase implements BaseConverterBean {private ProjectInfo PROJECTINFO;public ProjectInfo getPROJECTINFO() {return PROJECTINFO;}public void setPROJECTINFO(ProjectInfo pROJECTINFO) {PROJECTINFO pROJECT…

细数Android开发者的艰辛历程,全网最新

前言 这篇文章主要是分享今年面试心得&#xff0c;现已就职于某大厂有三个月了&#xff0c;近期有很多公司均已启动秋招&#xff0c;也祝大家面试顺利&#xff0c;获得理想的offer&#xff01; 之前找工作的那段时间感想颇多&#xff0c;总结一点面试经验和人生思考分享给大家…

Mac安装nginx配置过程

mac电脑系统重装了&#xff0c;记录一下安装nginx的过程&#xff1a; 1、打开终端 2、安装Command Line tools xcode-select --install 3、安装brew命令 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 4、安装…

2.用Python套用Excel模板,一键完成原亮样式

from xlutils.copy import copy import xlrd import xlwttem_excelxlrd.open_workbook(日统计.xls,formatting_infoTrue)tem_sheettem_excel.sheet_by_index(0)new_excelcopy(tem_excel) new_sheetnew_excel.get_sheet(0) new_sheet.write(2,1,12) new_sheet.write(3,1,18) new…

面试中Handler这些必备知识点你都知道吗?面试真题解析

前言 前几天去参加了一场面试。面试的题目大多很基础&#xff0c;有一道关于埋点的问题&#xff0c;面试官问我如果不用第三方SDK进行埋点&#xff0c;自己埋点的话&#xff0c;如何减少埋点对业务代码的入侵。 当时没想太多&#xff0c;就说创建一个 BaseView 类&#xff0c…

kubernetes对象之deployment

系列目录 简述 Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法&#xff0c;用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括&#xff1a; 定义Deployment来创建Pod和ReplicaSet滚动升级和回滚应用扩容和缩容暂停和继续Deploymen…

面试加分项!Android权限处理,手慢无

2021新的一年&#xff0c;开启新的征程&#xff0c;回顾2020&#xff0c;真是太“南”了。 从年初各大厂裁员&#xff0c;竟然成为一件理所应当的事情&#xff0c;到四月份 GitHub 上“996.ICU” 引起了大家的共鸣。即使我们兢兢业业“996”&#xff0c;但依旧难以抵御 35 岁时…

面试加分项!程序员工作2年月薪12K,附架构师必备技术详解

最近看到群里看到一个女生&#xff0c;讲述了她从开始选择Android&#xff0c;经过非常努力的学习和挣扎&#xff0c;然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜&#xff0c;如果早几年入行可能结果会比现在好很多&#xff0c;但可惜&#xff0c;这就是…

物理机实时监控UI之grafana(SimpleJson)+gRPC

在时序分析及监控展示领域&#xff0c;Grafana无疑是开源解决方案中的翘楚&#xff0c;其灵活的插件机制&#xff0c;支持各种漂亮的面板、丰富的数据源以及强大的应用。典型的面板有Graph、Text、Singlestat、PieChart、Table、Histogram等&#xff0c;支持的数据源有ES、Grap…

Uva679

Dropping Balls UVA - 679 思路&#xff1a;和之前做的开关灯的题类似 只需要看小球的编号奇偶。 找规律就行&#xff0c;一直想推导出这个规律满足所有情况&#xff0c;但是没有想出来怎么推。 1 #include<bits/stdc.h>2 #define maxn 1053 #define LL long long4 usi…

面试大厂应该注意哪些问题?算法太TM重要了

前言 很多次小伙伴问到学习方法&#xff0c;我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情&#xff0c;我没啥发言权&#xff0c;因为我自己本身都是没啥方法可言的&#xff0c;就瞎折腾那种&#xff0c;但是大家想看这样的一篇文章&a…