如何在 ASP.Net Core 中使用 Autofac

依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 太弱了。

为了解决这个问题,可以使用第三方的依赖注入容器,换句话说,你可以非常方便的使用 第三方容器 替换 原生容器, Autofac 就是这么一款优秀的依赖注入容器,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 Autofac。

安装 Autofac

安装 Autofac 非常简单,要么通过 Nuget 可视化界面进行安装。

要么在 NuGet Package Manager Console 命令行中输入如下命令。


Install-Package Autofac 
Install-Package Autofac.Extensions.DependencyInjection

创建注入类

为了能更好的解释依赖注入,考虑下面的 IAuthorRepository 接口,它包含了一个 GetMessage() 方法。

public interface IAuthorRepository{string GetMessage();}

接下来创建一个实现 IAuthorRepository 接口的 AuthorRepository 子类,如下代码所示:

public class AuthorRepository : IAuthorRepository{public string GetMessage(){return "Hello World";}}

哈哈,上面就是一个极简版的 仓储模式 ,目前还没有典型仓储模式有拥有的 CURD 方法,大家有兴趣可以补起来。

配置 Autofac

为了能够配置 Autofac,可以在 Startup.ConfigureServices() 方法中进行配置,大概分为以下两部分。

  • 创建 container 容器,将 service 注入到里面

可以使用 Autofac 框架提供的 Populate() 方法将 services 灌入到 container 中,如下代码所示:

var containerBuilder = new ContainerBuilder();containerBuilder.Populate(services);
  • 将自定义的类注入到 Container 中

这个实现就简单了,通过 RegisterType() 方法将自定义的类注入到 Autofac 容器中,如下代码所示:

containerBuilder.RegisterType<AuthorRepository>().As<IAuthorRepository>();

然后构建 container 容器,如下代码所示:

var container = containerBuilder.Build();return container.Resolve<IServiceProvider>();

接下来是 ConfigureServices() 方法的完整代码,仅供参考。

public IServiceProvider ConfigureServices(IServiceCollection services){services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);var containerBuilder = new ContainerBuilder();containerBuilder.Populate(services);containerBuilder.RegisterType<AuthorRepository>().As<IAuthorRepository>();var container = containerBuilder.Build();return container.Resolve<IServiceProvider>();}

在 Controller 中使用 Autofac

一切都配置好之后,接下来可以在 Controller 中实现注入,如下代码所示:

[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{private IAuthorRepository _authorRepository;public ValuesController(IAuthorRepository authorRepository){_authorRepository = authorRepository;}[HttpGet]public ActionResult<string> Get(){return _authorRepository.GetMessage();}}

依赖注入 是 控制反转 的一种实现方法,它的一大特点在于在外部统一管理对象之间的依赖关系从而解除代码内部之间的依赖关系,正如 Autofac 这样的 IOC 容器利用了控制反转实现了对象的自动初始化和对象的生命周期管理。

依赖注入有三种方式:

  • 构造函数注入

  • 接口注入

  • 属性注入

显而易见,在本篇中我用的是 构造函数注入

我们已经看到了如何在 ASP.Net Core 中使用 Autofac 替换默认的 Container ,但我们不能仅仅停留在简单使用上,更多深度的用法我会在后面的文章中和大家一起聊。

译文链接:https://www.infoworld.com/article/3397077/how-to-use-autofac-in-aspnet-core.html

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

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

相关文章

2010年11月编程语言排行榜:手机里的代码

【51CTO独家特稿】Tiobe今天发布了最新一期的编程语言排行榜。本期榜单的前五名与10月份没有明显变化&#xff0c;依然是Java、C、C、PHP和Python&#xff1b;Objective-C的增长势头强劲。本期另外一个值得注意的语言是重回前20名NXT-G。NXT-G是一种集成在乐高&#xff08;LEGO…

php网站开发期末大作业,大学生期末网页大作业

【实例简介】6页面的网页设计&#xff0c;是个人主页类型。包含了6个页面&#xff0c;包含视频、脚本等元素。水平不高&#xff0c;但交选修作业就足够了。【实例截图】【核心代码】为ai而狂└── 为ai而狂├── FLVPlayer_Progressive.swf├── Halo_Skin_3.swf├── Scri…

NET问答: 如何迭代 Enum ?

咨询区 Peter Mortensen&#xff1a;如何使用 C# 迭代 enum ?下面的代码会编译失败&#xff0c;错误信息: Suit is a type but is used like a variablepublic enum Suit {Spades,Hearts,Clubs,Diamonds }public void EnumerateAllSuitsDemoMethod() {foreach (Suit suit in S…

python hexdigest,Java方法,可以为Hex中的HMAC-SHA256提供与Python方法相同的输出

你确定你的密钥和输入是相同的,并在java和python中正确编码&#xff1f;HMAC-SHA256在两个平台上的工作方式相同.Java的Mac sha256_HMAC Mac.getInstance("HmacSHA256");SecretKeySpec secretKey new SecretKeySpec("1234".getBytes(), "HmacSHA256…

承接数字油画图稿/线条图定制(出图)业务

集异璧实验室对外提供数字油画图纸&#xff08;图稿/线条图&#xff09;定制和自选业务&#xff0c;欢迎洽谈。 定制流程&#xff1a; &#xff08;1&#xff09;贵方将图片传给我方&#xff1b; &#xff08;2&#xff09;我方出图&#xff0c;提供效果图&#xff1b; &#…

爬取异步请求(XHR/JS)数据方法

概述之前在做爬虫的时候&#xff0c;比如在爬取到https://www.1688.com/?spma261p.8650866.0.0.2dfa36c3tjLrCQ网页的时候&#xff0c;发现很多内容明明在浏览器看得见&#xff0c;但是请求下来的内容却没有&#xff0c;于是打开F12查看Network发现&#xff0c;如下&#xff1…

SQLServer支持大内存方案(转载)

转载自:http://user.qzone.qq.com/33524538?ptlang2052 SQLServer支持大内存方案 一、启动PAE支持; 方法&#xff1a;系统安装目录的根目录下有个系统隐藏文件&#xff1a;boot.int,加入/PAE参数 [boot loader] timeout30 defaultmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS…

php的old函数,laravel单元测试之phpUnit中old()函数报错解决

php 的 laravel单元测试之phpUnit中old()函数报错解决前言最近在做laravel单元测试.遇到了一个问题&#xff1a;当添加的view里面使用old()函数时就会报错,正常url访问没问题,但是在phpUnit中就报错错误原因: exception RuntimeException with message Session store not set o…

ASP.NET Core 集成 React SPA 应用

AgileConfig的UI使用react重写快完成了。上次搞定了基于jwt的登录模式&#xff08;AntDesign Pro .NET Core 实现基于JWT的登录认证&#xff09;&#xff0c;但是还有点问题。现在使用react重写后&#xff0c;agileconfig成了个确确实实的前后端分离项目。那么其实部署的话要分…

IBM在欧洲启动“智能云”研发计划

据国外媒体报道&#xff0c;IBM今日宣布将与15个欧洲合作伙伴启动一项联合研究项目&#xff0c;其中包括标准组织以及电信、医疗和媒体行业的企业一起开发一种基于目标的、标准化的“智能云”存储架构。 IBM表示&#xff0c;此次合作的目的是改善富媒体数据和存储服务跨国界跨厂…

etcd php,etcd集群备份和数据恢复

etcd是一个分布式k-v数据库&#xff0c;在kubernetes中使用其管理集群的元数据。这里介绍etcd集群数据的备份和数据恢复的方法和步骤。快照定期备份crontab定期执行备份脚本&#xff0c;每半小时备份一次&#xff0c;本地、异地都备份(暂定&#xff1a;本地备份保留最近10个备份…

Ingress-nginx工作原理和实践

本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案这个图算是一个通用的前后端分离的 k8s 部署结构:Nginx Ingress 负责暴露服务(nginx前端静态资源服务)&#xff0c; 根据十二要素应用的原 则&#xff0c;将后端 api 作为 nginx 服务的附加动态资源。Ingress vs Ingre…

oracle 查看用户状态,Oracle数据库查看用户状态

一、当前ORACLE用户的状态可查看视图DBA_USERS;一般情况下在使用的正常用户均处于OPEN状态。select username,account_status from dba_users;二、ORACLE数据库用户有多种状态&#xff0c;可查看视图USER_ASTATUS_MAP。select * from user_astatus_map;九种状态可分为两类&…

Dotnet洋葱架构实践

一个很清晰的架构实践&#xff0c;同时刨刨MySQL的坑。一、洋葱架构简介洋葱架构出来的其实有一点年头了。大约在2017年下半年&#xff0c;就有相关的说法了。不过&#xff0c;大量的文章在于理论性的讨论&#xff0c;而我们今天会用一个项目来完成这个架构。洋葱架构&#xff…

显示桌面,原来这么简单的

显示桌面的按钮其实很简单,我也是无意中发现的,代码如下,复制到记事本中,另存为.scf文件,文件名随便去,双击即可看看效果,^_^[Shell]Command2IconFileexplorer.exe,3[Taskbar]CommandToggleDesktop转载于:https://www.cnblogs.com/crid/archive/2010/11/28/5172732.html

php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程

面向对象设计是php程序开发中一个很重要的内容块&#xff0c;如果你想成为高级php程序员我们必须知道面向对象设计具体用法与写法。维护简单 模块化是面向对象编程中的一个特征。实体被表示为类和同一名字空间中具有相同功能的类&#xff0c;我们可以在名字空间中添加一个类而不…

EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

前言本文主要是讲解EF Core3.0 通过拦截器实现读写分离与SQL日志记录注意拦截器只有EF Core3.0 支持,2.1请考虑上下文工厂的形式实现.说点题外话..一晃又大半年没更新技术博客..唉,去年一年发生了太多事情..博主真的 一言难尽..有兴趣的可以去看看:记录一下,也许是转折,也许是结…

oracle clob 查询换行,sqoop clob从Oracle导入到hive   回车换行导致记录增多

sqoop clob从Oracle导入到hive 回车换行导致记录增多发布时间&#xff1a;2020-06-27 02:45:01来源&#xff1a;51CTO阅读&#xff1a;3159作者&#xff1a;jackwxhsqoop import --hive-import --hive-overwrite --connect jdbc:oracle:thin:192.168.92.136:1521:cyporcl --…

对于scanf的使用一点体会心得

今天非常的突发气象的在acm上面做了一下题目&#xff0c;悲剧的是多年不用c的人忘记了怎么样的使用scanf了&#xff0c;今天还学到了一点东西。 题目里面提示了输入两个数&#xff0c;规定第1&#xff5e;6列是第一个数的范围&#xff0c;第8&#xff5e;9列是第二个数的范围。…

毕业二十年,为什么人和人之间的差距那么大?

这是头哥侃码的第237篇原创最近天气逐渐转暖&#xff0c;身边的各种聚会也开始多了起来。找个周末&#xff0c;朋友之间喝点小酒&#xff0c;或者跟高中同学来一场久违的重逢&#xff0c;重温着曾经的回忆&#xff0c;加深着彼此之间的感情&#xff0c;想必都是不错的选择。什么…