如何在 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
總結
以上是生活随笔為你收集整理的如何在 ASP.Net Core 中使用 Autofac的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EF Core事务提交,分布式事务
- 下一篇: NET问答: 如何迭代 Enum ?