Я создаю пакет Nuget для ядра Asp.Net. Я хочу упростить настройку. Поэтому я решил предложить свободный способ добавления своего Nuget в коллекцию сервисов в ConfigureServices()
в Asp.Net Core.
Вот что я планирую сделать:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => options....);
services.AddMyNugetPackageName();
}
Внутри моего метода AddMyNugetPackageName()
,
public static IServiceCollection AddMyNugetPackageName(this IServiceCollection services)
{
services
.AddMvc(options => options.ModelBinderProviders.Insert(0, new MyModelBinderProvider()))
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
return services;
}
Итак, теперь, если люди начнут использовать мой пакет Nuget, заменит ли AddMvc()
внутри моего AddMyNugetPackageName()
AddMvc()
в их ConfigureServices()
? Не вызовет ли это каких-либо проблем у конечных пользователей?
Если это заменит AddMvc()
пользователя в его ConfigureServices()
, то каков наилучший подход или как с этим справиться?
@DavidG Да, даже я думаю о лучшем подходе!! Пожалуйста, не могли бы вы помочь мне, как это можно сделать лучше? Я также добавляю services.TryAddSingleton<IHttpContextAccessor,HttpContextAccessor>();
в свой AddMyNugetPackageName()
. Так как же это лучше реализовать? Это то, что я подумал вместо того, чтобы просить моего конечного пользователя добавить эти три элемента в ConfigureServices()
Я подумал, что было бы лучше, если бы я дал свободный подход
Вы можете использовать шаблон IConfigureOptions
для внедрения конфигурации MvcOptions
из вашего пакета nuget.
public class MyConfigureOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0,new MyModelBinderProvider());
}
}
Используйте ConfigureOptions
, чтобы зарегистрировать свои варианты
public static IServiceCollection AddMyNugetPackageName(this IServiceCollection services)
{
services.ConfigureOptions<MyConfigureOptions>();
}
Добавьте свои службы nuget в коллекцию служб.
services.AddMvc();
services.AddMyNugetPackageName();
Привет @ботинок. Спасибо, что научили меня новой технике. Как добавить AddJsonOptions()
в MyConfigureOptions
? Нужно ли мне наследовать другой интерфейс, такой как IConfigureOptions<MvcOptions>, IConfigureOptions<MvcJsonOptions>
, и иметь два Configure(MvcOptions options)
и Configure(MvcJsonOptions options)
?
Да, это другой тип, который вы хотите настроить, поэтому создайте новый класс configOptions и еще один вызов ConfigureOptions
Да, я так и поступил. Спасибо за вашу помощь и поддержку.
Деос это "добавит" к существующим MvcOptions
или "заменит" их?
Стоит добавить, что вы можете использовать services.Configure<MvcOptions>(o => { ..... });
, если не хотите создавать новый класс для настройки параметров.
Я бы сказал, что это не очень хорошая практика. Технически это не будет проблемой, потому что вы просто добавляете службы, но это означает, что дополнительные биты MVC, которые вы настраиваете, скрыты от пользователя и могут вызвать путаницу. Похоже, вы просто добавляете преобразователь контрактов JSON и настраиваемую привязку модели, почему бы просто не добавить эти две вещи?