如何在启动.cs中注册具有泛型类型的接口



我在 ASP.NET Core中使用WebAPI。

这有效:

services.AddScoped<IApiKeysService, APIKeysService>();

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

services.AddScoped<IApiKeysService>();

使用泛型类型blah时出错,需要1个类型参数

或者这个

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

我收到以下编译错误

找不到类型或命名空间 T

如何在Startup.cs中注册?

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

接口

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

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

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

在构造函数中指定为:

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

开放泛型

打开泛型在 .NET: typeof(SomeGenericType<>) 中始终以相同的方式指定。

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

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

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

最新更新