首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Startup.cs中注册泛型类型的接口

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

Stack Overflow用户
提问于 2018-03-18 20:17:18
回答 1查看 5.9K关注 0票数 2

我正在ASP.NET内核中使用ASP.NET。

这样做是可行的:

代码语言:javascript
复制
services.AddScoped<IApiKeysService, APIKeysService>();

既然接口返回的是泛型类型T,则不会

代码语言:javascript
复制
services.AddScoped<IApiKeysService>();

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

或者这个

代码语言:javascript
复制
services.AddScoped<IApiKeysService<T>>();

我得到以下编译错误

找不到类型或命名空间T

如何在Startup.cs中注册?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-18 20:24:24

接口

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

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

代码语言:javascript
复制
services.AddScoped(typeof(Foo<>));

它在构造函数中指定为:

代码语言:javascript
复制
public MyService(Foo<ClosingType> foo)
{
    // implementation
}

开放泛型

在.NET:typeof(SomeGenericType<>)中,开放泛型总是以相同的方式指定。

代码语言:javascript
复制
services.AddScoped(typeof(IFoo<>), typeof(Foo<>));

如果有多个打开的泛型参数,您将指定使用逗号的数量。例如,有两个开放的泛型参数:

代码语言:javascript
复制
services.AddScoped(typeof(IFoo<,>), typeof(Foo<,>));
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49352434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档