使用通用类型IProcess <T>需要1个类型参数-如何返回通用接口?

时间:2019-07-02 10:16:50

标签: c# oop interface

我有一个如下界面

public interface IProcess<T> where T : class
{
    void Process(string id);
}

我有一个依赖于其他类的类。所以我正在按照以下方式使用构造函数注入

public class ProcessFactory: IProcessFactory
{
     public ProcessFactory(IProcess<ProcessSalaryRequest> processSalaryRequest, 
                           IProcess<ProcessLeavesRequest> processLeavesRequest)
        {
             _processSalaryRequest = processSalaryRequest;
             _processLeaveRequest = processLeavesRequest;
        }
     }

     public IProcess GetInstance(string type)//error comes here
     {
        Type atype;
        if (Enum.TryParse(type, out atype))
        {
            switch (atype)
            {
                case Type.Type1:
                    return _processSalaryRequest ;
                    break;
                case Type.Type2:
                    return _processLeaveRequest ;
                    break;
              }
        }
        return null;
     }
}

这是用法

 IProcess processRequest =  _ProcessFactory.GetInstance("Type1");

但是我看到以下错误,

  

使用通用类型IProcess需要1个类型参数

如何修复“ GetInstance”方法的返回类型?

1 个答案:

答案 0 :(得分:1)

当我们在您的代码示例中可以看到的唯一接口是通用接口-IProcess时,我们尝试返回非通用接口IProcess<T>。编译器不知道如何将IProcess<T>转换为IProcess

一种可能的解决方案是添加一个非泛型接口,并使该泛型接口从其继承:

public interface IProcess
{
    void Process(string id);
}


public interface IProcess<T> : IProcess where T : class
{
}
相关问题