我想将值传递给IOptions<T>
参数。
我只能找到在配置中使用IOptions<T>
的示例,但是调用方法时需要定义自定义值。
答案 0 :(得分:0)
我假设您正在询问如何创建自定义IOptions<TOptionClass>
值,并在其中指定要使用的T
实例。这是您可以执行的操作:
假设您的示例中有一个名为IdentityOptions
的类。
首先创建一个实例:
var optionsInstance = new IdentityOptions();
// ... set properties on it as needed
然后将其转换为Option容器:
IOptions<IdentityOptions> optionParameter = Options.Create(optionsInstance);
请参见MSDN。
更新:我比OP自己的解决方案慢了几秒钟。让我添加可能的扩展方法解决方案,以便此答案仍具有一些附加值(未经测试):
public static IOptions<TOptions> AsIOption<TOptions>(this TOptions optionInstance) where TOptions : class, new()
{
return Microsoft.Extensions.Options.Options.Create(optionInstance);
}
然后您可以用作optionInstance.AsIOption()
。我不确定是否值得付出努力(我不希望不必要地污染Object
类),但是肯定是可能的,并且如果您在许多不同的地方使用此技术,可能会很有用。>
答案 1 :(得分:-1)
我的解决方案:
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;
}