Я предполагаю, что вы спрашиваете, как создать пользовательское значение IOptions<TOptionClass>
, где вы указываете экземпляр T
, который будет использоваться.Вот как вы можете это сделать:
Предположим, у вас есть класс с именем IdentityOptions
, как в вашем примере.
Сначала создайте его экземпляр:
var optionsInstance = new IdentityOptions();
// ... set properties on it as needed
Затем преобразуйте его в контейнер Option:
IOptions<IdentityOptions> optionParameter = Options.Create(optionsInstance);
См. MSDN .
Обновление: Я был на несколько секунд медленнее, чемСобственное решение ОП.Позвольте мне добавить возможное решение с помощью метода расширения , поэтому этот ответ по-прежнему имеет некоторую добавленную стоимость (не проверено):
public static IOptions<TOptions> AsIOption<TOptions>(this TOptions optionInstance) where TOptions : class, new()
{
return Microsoft.Extensions.Options.Options.Create(optionInstance);
}
, которое затем можно использовать как optionInstance.AsIOption()
.Я не уверен, стоит ли это усилий (я не люблю загрязнять класс Object
, если в этом нет необходимости), но, безусловно, возможно, и может оказаться полезным, если вы будете использовать эту технику во многих местах.