我们需要创建一个通用方法来获取服务的任何设置。我们为每个“服务”都有一个配置类,但是文件appsettings.json.
一个常见的例子:
public abstract class BaseProgram
{
protected IServiceCollection serviceCollection = new ServiceCollection();
...
protected internal void ConfigureServices()
{
serviceCollection.Configure<MyConfiguration1>(configuration.GetSection("IndividualConfiguration"));
serviceCollection.Configure<MyConfiguration2>(configuration.GetSection("IndividualConfiguration"));
serviceCollection.Configure<MyConfiguration3>(configuration.GetSection("IndividualConfiguration"));
}
我们想创建一些更通用的东西,像这样:
public T ServiceParameters<T>()
{
return serviceCollection.Configure<T>(configuration.GetSection("IndividualConfiguration"));
}
通话示例:
var call1 = whatever.ServiceParameters<MyConfiguration1>();
...
var call2 = whatever.ServiceParameters<MyConfiguration2>();
但是,当前的实现TOptions
无法实现:
注册将与TOptions绑定的配置实例。
类型参数: TOptions:正在配置的选项的类型。
问题:
类型“ T”必须是引用类型,才能用作通用类型或方法中的“ TOptions”参数
OptionsConfigurationServiceCollectionExtensions.Configure <TOptions>(IServiceCollection, IConfiguration)
。
这只有在我们扩展课程的情况下才可能吗?还是我们写错了什么?
答案 0 :(得分:1)
唯一的约束是TOptions必须是一个类
像这样声明您的方法:
public IServiceCollection ServiceParameters<T>() where T : class
如果不是,则编译器会假定您要传递任何内容作为类型参数(包括结构),而Configure
方法无法接受。