我的Startup类中有以下代码,它使用IModelBinderProvider. 大多数输入格式化程序都需要一个ILogger实例,因此我需要一个ILoggerFactory, 并且为此我想使用配置的一个,它以指定的详细程度记录到指定的目标。我ILoggerFactory从一个新建的IServiceProvider:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvcCore(
options =>
{
...
var serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
options.ModelBinderProviders.Clear();
options.ModelBinderProviders.Add(
new MyCustomBinderProvider(options.InputFormatters, loggerFactory)
);
...
}
);
...
}
问题是我收到以下警告:
Startup.cs(62, 43): [ASP0000] Calling 'BuildServiceProvider' from application code results in an
additional copy of singleton services being created. Consider alternatives such
as dependency injecting services as parameters to 'Configure'.
我看了一下这个问题:Resolving instances with ASP.NET Core DI from within ConfigureServices。但是,我的代码是一个 lambda AddMvcCore,它正在配置options对象。换句话说,在Configure调用时,MVC 选项已经定义好了。
有没有办法在这里做正确的事情,即防止无关的实例IServiceProvider?