Этого можно добиться, создав класс, реализующий интерфейс IConfigureOptions<MvcOptions>
:
public class AddCustomModelMetadataDetailsProvider : IConfigureOptions<MvcOptions>
{
private readonly MyCustomModelMetadataDetailsProvider _provider;
public AddCustomModelMetadataDetailsProvider(MyCustomModelMetadataDetailsProvider provider)
{
_provider = provider;
}
public void Configure(MvcOptions options)
{
options.ModelMetadataDetailsProviders.Add(_provider);
}
}
и зарегистрируйте его как таковой в методе Configure
:
services.AddTransient<IConfigureOptions<MvcOptions>, AddCustomModelMetadataDetailsProvider>();
Преимущество этого подхода, как вы можете видеть, заключается в том, что вы можете использовать регулярное внедрение конструктора в классе AddCustomModelMetadataDetailsProvider
, чтобы получить экземпляр интересующей вас службы.
ASP.NET автоматически вызывает методы Configure
всех служб IConfigureOptions<MvcOptions>
, зарегистрированных в контейнере.
Поскольку создание этих классов может занимать много времени, в ASP.NET Core 2.2 появились новые перегрузки, которые позволяют выполнять следующие действия:
services
.AddOptions<MvcOptions>()
.Configure<MyCustomModelMetadataDetailsProvider>((options, customMetadataDetailsProvider) =>
{
options.ModelMetadataDetailsProviders.Add(customMetadataDetailsProvider);
});
В этом случае customMetadataDetailsProvider
будет получен из контейнера.
Вы можете включить до 5 служб для настройки своих параметров. Смотрите эту страницу официальной документации .