Как создать IOptions <T>из пользовательского экземпляра T (не через DI) - PullRequest
0 голосов
/ 28 декабря 2018

Я бы хотел передать значение параметру IOptions<T>.

Я могу найти только примеры использования IOptions<T> с конфигурацией, но мне нужно определить пользовательское значение при вызове метода.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Я предполагаю, что вы спрашиваете, как создать пользовательское значение 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, если в этом нет необходимости), но, безусловно, возможно, и может оказаться полезным, если вы будете использовать эту технику во многих местах.

0 голосов
/ 28 декабря 2018

Мое решение:

public LCSignInManager(UserManager<Profile> userManager, IdentityDbContext db, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory<Profile> claimsFactory, IOptions<IdentityOptions> optionsAccessor = null) : base(userManager, contextAccessor, claimsFactory, optionsAccessor, new LoggerFactory().CreateLogger<LCSignInManager>(), (IAuthenticationSchemeProvider)new AuthenticationSchemeProvider(GetOption()).GetDefaultAuthenticateSchemeAsync().Result)
{
    _userManager = userManager;
    this.DbContext = db;
}

private static IOptions<AuthenticationOptions> GetOption()
{
    var settings = new AuthenticationOptions
        {

        };

    IOptions<AuthenticationOptions> result = Microsoft.Extensions.Options.Options.Create(settings);

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...