每次都要在Program.cs一個一個註冊,想找個方式批測註冊,也不用怕忘記有沒有註冊的類別。
同步更新於個人部落格
Autofac範例
選擇ASP.NET Core Web API專案範本,並執行下一步
命名你的專案名稱,並選擇專案要存放的位置。
直接進行下一步
新增之後需要來描述要批次注入的規則
並且繼承autofac的類別Module
//初始化並建立一個實例
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//註冊autofac這個容器
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutofacModuleRegister()));
有繼承autofac的類別Module
新增下圖兩個資料夾
此次的目的是要可以進行批次注入,所以檔名結尾都需要包含Service,做批次注入時可以辨識
namespace AutoFacExample.Services.Interface {
public interface ITest {
public string GetName(string id);
}
}
using AutoFacExample.Services.Interface;
namespace AutoFacExample.Services {
public class TestService : ITest {
public string GetName(string id) {
return $"{id}:Bill";
}
}
}
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();
}
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說明文件
參考文件
參考文件
參考文件