我在 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<,>));