我有一个中间件库,我打算在多个项目中使用它。中间件本身看起来是这样的:将注入器注入中间件依赖关系
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