網站首頁 編程語言 正文
1 前置閱讀
在閱讀本文章之前,你可以先閱讀:
2 簡介
Autofac與C#語言的結合非常緊密,并學習它非常的簡單,也是.NET領域最為流行的IoC框架之一。
3 使用
首先,將Autofac的NuGet軟件包安裝到您的應用程序中。
Autofac
然后,我們通過創建ContainerBuilder來注冊組件。
var builder = new ContainerBuilder(); builder.RegisterType<Knife>(); builder.RegisterType<Actor>();
接著,可以通過在一個已存在的生命周期上調用 BeginLifetimeScope() 方法來創建另一個生命周期作用域, 以根容器作為起始。生命周期作用域是可釋放的并且追蹤組件的釋放, 因此確保你總是調用了 "Dispose()"" 或者把它們包裹在 "using" 語句內。
using (var scope = container.BeginLifetimeScope()) { }
最后,在注冊完組件并暴露相應的服務后, 你可以從創建的容器或其子生命周期中解析服務. 讓我們使用 Resolve() 方法來實現:
using (var scope = container.BeginLifetimeScope()) { var actor = scope.Resolve<Actor>(); actor.Kill(); }
讓我們來看看完整代碼:
using System; namespace Autofac.ConsoleApp { class Program { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<Knife>(); builder.RegisterType<Actor>(); var container = builder.Build(); using (var scope = container.BeginLifetimeScope()) { var actor = scope.Resolve<Actor>(); actor.Kill(); } Console.ReadKey(); } } }
讓我們來看看輸出結果:
小明用刀殺怪
4 在 Asp.Net Core 中使用
首先,將Autofac,Autofac.Extensions.DependencyInjection的NuGet軟件包安裝到您的應用程序中。
dotnet add package Autofac dotnet add package Autofac.Extensions.DependencyInjection
然后,在Program.Main中增加.UseServiceProviderFactory(new AutofacServiceProviderFactory())
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .UseServiceProviderFactory(new AutofacServiceProviderFactory());
接著,在Startup.ConfigureServices中增加services.AddControllersWithViews();
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" }); }); services.AddControllersWithViews(); }
接著,在Startup.ConfigureContainer方法中,將Knife,Actor注冊到Autofac中ContainerBuilder。
public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterType<Knife>(); builder.RegisterType<Actor>(); }
最后,增加HomeController,執行actor.Kill。
using Microsoft.AspNetCore.Mvc; using System; namespace Autofac.WebApi.Controllers { [Route("[controller]")] [ApiController] public class HomeController : Controller { private readonly Actor actor; public HomeController(Actor actor) { this.actor = actor ?? throw new ArgumentNullException(nameof(actor)); } [HttpGet] public string Get() { return actor.Kill(); } } }
啟動調試,讓我們來看看輸出結果:
小明用刀殺怪
原文鏈接:https://www.cnblogs.com/zcqiand/p/14257650.html
相關推薦
- 2022-07-24 Android中關于定時任務實現關閉訂單問題_Android
- 2022-11-27 Python?Django教程之實現待辦事項應用程序_python
- 2022-05-23 詳解Rust中的workspace_相關技巧
- 2023-11-20 如何設置樹莓派4B的頻率?
- 2023-10-15 動態演示操作系統進程調度算法,FCFS, RR, SPN, SRT, HRRN
- 2022-05-18 Python繪制散點圖的教程詳解_python
- 2023-03-22 淺談C#中[]的幾種用法_C#教程
- 2023-05-06 MacOS安裝python報錯"zsh:?command?not?found:python"的解決方
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支