小编Rya*_*ion的帖子

在 C# 中,如何使用泛型基类将泛型接口的所有实例注入到单个构造函数中?

我定义了以下接口:

public interface ICustomService<T> where T : CustomObject
{
   IEnumerable<T> GetById(int Id);
   ...
}
Run Code Online (Sandbox Code Playgroud)

它的 2 个实现,其中MyObject1&MyObject2都继承自CustomObject

public class CustomService1 : ICustomService<MyObject1>
{
    public IEnumerable<MyObject1> GetById(int Id)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
public class CustomService2 : ICustomService<MyObject2>
{
    public IEnumerable<MyObject2> GetById(int Id)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将这两个注册为ICustomService<CustomObject>但收到错误:

没有从“CustomerService1”到“ICustomService<CustomObject>”的隐式引用转换

相反,像这样注册:

services.AddTransient<ICustomService<MyObject1>, CustomService1>();
services.AddTransient<ICustomService<MyObject2>, CustomService2>();
Run Code Online (Sandbox Code Playgroud)

当像上面那样注册时,我的 IEnumerableservices是空的:

public ThirdService(IEnumerable<ICustomService<CustomObject>> services)
{
    
}
Run Code Online (Sandbox Code Playgroud)

如何将所有实现注入ICustomServiceThirdService

我正在尝试这样做,以便ThirdService可以给定一个 ID,然后在所有服务上CustomObject使用该 ID来获取所有内容。 …

.net c# generics dependency-injection interface

6
推荐指数
1
解决办法
1928
查看次数

标签 统计

.net ×1

c# ×1

dependency-injection ×1

generics ×1

interface ×1