如何在通用方法中将IOptions <T>用作通用参数

时间:2019-06-20 01:42:03

标签: c# asp.net-core

我正在尝试创建一个使用IOptions<T>作为参数的通用方法,但是代码似乎无效。

Visual Studio显示以下消息:

  

TConfig必须是具有非参数类型的非抽象类型   构造函数以便将其用作泛型中的参数“ TOption”   类型或方法'IOptions<TOptions>'

任何有关如何解决此问题的建议将不胜感激。谢谢!

public static IServiceCollection AddConfigurations<TConfig>(
    this IServiceCollection services, IConfiguration configuration, 
    IOptions<TConfig> options) 
    where TConfig : class
{
}

2 个答案:

答案 0 :(得分:3)

问题在于,IOptions具有以下约束:

where TOptions : class, new()

因此,您也需要此约束(new()):

public static IServiceCollection AddConfigurations<TConfig>(
    this IServiceCollection services, IConfiguration configuration, 
    IOptions<TConfig> options) 
    where TConfig : class, new()
{
}

答案 1 :(得分:1)

请查看T的定义中对IOptions<T>的约束。由于AddConfigurations<TConfig>的约束使用TConfig,因此至少需要约束IOptions<TConfig>