目的
批次註冊
建立新專案
選擇ASP.NET Core Web API專案範本,並執行下一步
設定新的專案
命名你的專案名稱,並選擇專案要存放的位置。
其他資訊
直接進行下一步
NuGet加入套件
新增類別檔
新增之後需要來描述要批次注入的規則
- 加入前
- 加入後
並且繼承autofac的類別Module
編輯Program.cs檔案
//初始化並建立一個實例
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//註冊autofac這個容器
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutofacModuleRegister()));
有繼承autofac的類別Module
新增資料夾
新增下圖兩個資料夾
新增類別檔
此次的目的是要可以進行批次注入,所以檔名結尾都需要包含Service,做批次注入時可以辨識
- 在Services資料夾底下加入類別檔案,名稱為TestService
- 在Interface資料夾底下加入介面檔案,名稱為ITest
- ITest.cs寫入程式
namespace AutoFacExample.Services.Interface {
public interface ITest {
public string GetName(string id);
}
}
- TestService.cs寫入程式 繼承介面後寫上與介面相同的方法
using AutoFacExample.Services.Interface;
namespace AutoFacExample.Services {
public class TestService : ITest {
public string GetName(string id) {
return $"{id}:Bill";
}
}
}
AutofacModuleRegister執行批次註冊
protected override void Load(ContainerBuilder builder) {
//RegisterAssemblyTypes => 註冊所有集合
//Where(t => t.Name.EndsWith("Service")) => 找出所有Service結尾的檔案
//AsImplementedInterfaces => 找到Service後註冊到其所繼承的介面
builder.RegisterAssemblyTypes(typeof(Program).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
}
新增測試用controller
- TestController.cs寫入程式
using AutoFacExample.Services.Interface;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace AutoFacExample.Controllers {
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase {
//為隱私修飾詞並且唯讀
private readonly ITest _test;
//在建構子時注入需要使用的服務
public TestController(ITest test) {
_test = test;
}
[HttpGet("GetName")]
public string Get(string id) {
//使用注入的服務
return _test.GetName(id);
}
}
}
注入的服務都是使用介面,目的是之後方便抽換,才可以進行測試 命名原則都會加一個底線代表全域變數
執行結果
最終確認程式是可執行,就沒有問題了。
參考
.net6註冊autofac說明文件 參考文件 參考文件 參考文件