我在ASP.NET Core中使用WebAPI。
这有效:
services.AddScoped<IApiKeysService, APIKeysService>();
现在接口返回泛型类型T这不是
services.AddScoped<IApiKeysService>();
错误使用泛型类型blah需要1种类型Arguments
或者这个
services.AddScoped<IApiKeysService<T>>();
我收到以下编译错误
无法找到类型或命名空间
如何在Startup.cs
注册?
注意:我不能使用具体类型,因为接口成员是具有泛型方法的基类。
答案 0 :(得分:7)
您无法实例化接口,因此无法在没有实现类型的情况下注册接口(无论是否通用)。
但是,可以将类型注册为具体类型而不是接口。
services.AddScoped(typeof(Foo<>));
在构造函数中指定为:
public MyService(Foo<ClosingType> foo)
{
// implementation
}
Open .NET中的泛型总是以相同的方式指定:typeof(SomeGenericType<>)
。
services.AddScoped(typeof(IFoo<>), typeof(Foo<>));
如果有多个打开的通用参数,您可以使用逗号指定多少个。例如,使用2个开放的通用参数:
services.AddScoped(typeof(IFoo<,>), typeof(Foo<,>));