如何在Startup.cs中注册Generic类型的接口

时间:2018-03-18 20:17:18

标签: c# generics asp.net-core dependency-injection .net-core

我在ASP.NET Core中使用WebAPI。

这有效:

services.AddScoped<IApiKeysService, APIKeysService>();

现在接口返回泛型类型T这不是

services.AddScoped<IApiKeysService>();

错误使用泛型类型blah需要1种类型Arguments

或者这个

services.AddScoped<IApiKeysService<T>>();

我收到以下编译错误

  

无法找到类型或命名空间

如何在Startup.cs注册?

  

注意:我不能使用具体类型,因为接口成员是具有泛型方法的基类。

1 个答案:

答案 0 :(得分:7)

接口

您无法实例化接口,因此无法在没有实现类型的情况下注册接口(无论是否通用)。

但是,可以将类型注册为具体类型而不是接口。

services.AddScoped(typeof(Foo<>));

在构造函数中指定为:

public MyService(Foo<ClosingType> foo)
{
    // implementation
}

Open Generics

Open .NET中的泛型总是以相同的方式指定:typeof(SomeGenericType<>)

services.AddScoped(typeof(IFoo<>), typeof(Foo<>));

如果有多个打开的通用参数,您可以使用逗号指定多少个。例如,使用2个开放的通用参数:

services.AddScoped(typeof(IFoo<,>), typeof(Foo<,>));
相关问题