首页 > 解决方案 > 如何创建 IOptions来自 T 的自定义实例(不是通过 DI)

问题描述

我想将值传递给IOptions<T>参数。

我只能找到使用IOptions<T>with configuration 的示例,但我需要在调用方法时定义自定义值。

标签: c#asp.net-core

解决方案


我假设您正在询问如何IOptions<TOptionClass>在您指定T要使用的实例的位置创建自定义值。您可以这样做:

假设您有一个IdentityOptions在您的示例中调用的类。

首先创建它的一个实例:

var optionsInstance = new IdentityOptions();
// ... set properties on it as needed

然后将其转换为选项容器:

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如果没有必要,我不喜欢污染课堂),但肯定是可能的,并且如果您在许多不同的地方使用这种技术可能会变得有用。


推荐阅读