我想使用 ASP.NET Core 自己的日志记录和 DI 机制在我的代码中执行一些调试日志记录和跟踪。所以我的 ModelBinderProvider 看起来像这样:
public class MyOwnModelBinderProvider: // ... bla bla
{
public MyOwnModelBinderProvider(ILogger<MyOwnModelBinderProvider> logger)
{
// .. bla bla
}
}
在 Startup.cs 中设置自定义 ModelBinderProviders 的推荐方法如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersAndViews(configure =>
configure.ModelBinderProviders.Insert(0,
new MyOwnModelBinderProvider(/** WHAT TO PUT HERE? **/)));
}
我对此进行了研究,人们一直在通过在ConfigureServices方法中调用BuildServiceProvider
来创建服务提供者的单独实例,但是David Fowler was strictly against that因为它可能会创建一个服务提供者集合的挂起实例,并且永远不会释放。
仅仅传递一个记录器实例对我来说也是相当大的开销。我在这里错过了一个明显的模式吗?我感觉应该容易多了。
最佳答案
我可以想到两种方法来做到这一点:
- 在
GetBinder
中,ModelBinderProviderContext
有一个Services
property . - 您可以在调用
AddControllersAndViews
之外配置 MvcOptions:
builder.Services.AddOptions<MvcOptions>()
.Configure<ILoggerFactory>((options, loggerFactory) =>
{
options.ModelBinderProviders.Add(new MyOwnModelBinderProvider(loggerFactory));
});
这使您可以将依赖项传递给通过选项创建的事物。
关于c# - 如何将记录器实例传递给ConfigureServices中的自定义ModelBinderProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539927/