網站首頁 編程語言 正文
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-12-08 C++?float轉std::string?小數位數控制問題_C 語言
- 2023-06-21 python相對包導入報“Attempted?relative?import?in?non-pack
- 2021-12-14 nginx.pid打開失敗以及失效的解決方案_nginx
- 2023-06-21 Rust?Atomics?and?Locks?源碼解讀_Rust語言
- 2022-12-12 BAT腳本接收輸入數字_DOS/BAT
- 2022-12-31 Python中CSV文件的讀寫庫操作方法_python
- 2022-09-15 Python利用shutil實現拷貝文件功能_python
- 2022-04-28 Python可視化學習之seaborn繪制線型回歸曲線_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同步修改后的遠程分支