我有一箇中間件庫,我打算在多個項目中使用它。中間件本身看起來是這樣的:將注入器注入中間件依賴關係
public SdkMiddleware(RequestDelegate next, ILogger<SdkMiddleware> logger, ISdk sdk)
{
this.next = next;
this.logger = logger;
this.sdk = agentSdk;
this.sdk.Init();
...
}
由於DI,我可以簡單地注入我的記錄:
// Would rather this class be internal...
public class Sdk: ISdk
{
private ILogger<Sdk> logger;
public Sdk(ILogger<Sdk> logger)
{
this.logger = logger;
}
public void Init() {
this.logger.Info(...) // Do some logging
}
這樣做的缺點是我的類需要在每一個ASP.Net項目的Startup.cs
登記:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ISdk, Sdk>();
是最好的/唯一的路線?每次我想要將一個記錄器注入一個類,我需要在我的組合根目錄中註冊該類的DI。
看看內存緩存怎麼註冊自己[這裏](https://github.com/aspnet/Caching/blob/dev/src/Microsoft.Extensions.Caching.Memory/MemoryCacheServiceCollectionExtensions.cs#L22-L33) – Tseng