我想使用ASP.NET Core自己的日志记录和DI机制在我的代码中执行一些调试日志记录和跟踪。所以我的ModelBinderProvider看起来像这样: 在Startup.cs中设置自定义ModelBinderProviders的推荐方法如下: 我对此进行了研究,人们一直在通过在ConfigureServices方法中调用 对我来说,传递一个logger实例对我来说也是一笔很大的开销。我在这里缺少明显的模式吗?我觉得应该容易得多。 答案 0 :(得分:3) 我可以想到两种方法: 这使您可以将依赖项传递给通过选项创建的事物。public class MyOwnModelBinderProvider: // ... bla bla
{
public MyOwnModelBinderProvider(ILogger<MyOwnModelBinderProvider> logger)
{
// .. bla bla
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersAndViews(configure =>
configure.ModelBinderProviders.Insert(0,
new MyOwnModelBinderProvider(/** WHAT TO PUT HERE? **/)));
}
BuildServiceProvider
来创建服务提供者的单独实例,但是David Fowler was strictly against that可能会创建一个从未释放的服务提供者集合的悬挂实例。 1 个答案:
GetBinder
中,ModelBinderProviderContext
有一个Services
property。AddControllersAndViews
的调用之外配置MvcOptions:builder.Services.AddOptions<MvcOptions>()
.Configure<ILoggerFactory>((options, loggerFactory) =>
{
options.ModelBinderProviders.Add(new MyOwnModelBinderProvider(loggerFactory));
});