我想将一个值传递给一个IOptions<T>参数。
我只能找到使用IOptions<T>配置的示例,但我需要在调用方法时定义自定义值。
Mar*_*oth 15
我假设您询问如何IOptions<TOptionClass>在指定T要使用的实例的位置创建自定义值。您可以按照以下方法执行此操作:
假设您有一个名为IdentityOptions您的示例中的类。
首先创建它的实例:
var optionsInstance = new IdentityOptions();
// ... set properties on it as needed
Run Code Online (Sandbox Code Playgroud)
然后将其转换为选项容器:
IOptions<IdentityOptions> optionParameter = Options.Create(optionsInstance);
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN。
更新:我比OP自己的解决方案慢了几秒钟。让我添加一个可能的扩展方法解决方案,这样这个答案仍然有一些附加值(未测试):
public static IOptions<TOptions> AsIOption<TOptions>(this TOptions optionInstance) where TOptions : class, new()
{
return Microsoft.Extensions.Options.Options.Create(optionInstance);
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将其用作optionInstance.AsIOption(). 我不确定这是否值得付出努力(Object如果没有必要,我不喜欢污染班级),但肯定是可能的,并且如果您在许多不同的地方使用这种技术可能会很有用。
Ste*_*ler -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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5103 次 |
| 最近记录: |