использование универсального типа IProcess <T>требует аргумента 1 типа - как вернуть универсальный интерфейс? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующий интерфейс

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 Ответ

1 голос
/ 02 июля 2019

Мы пытаемся вернуть IProcess, который не является универсальным интерфейсом, когда единственный интерфейс, который мы видим в вашем примере кода, является универсальным - IProcess<T>.Компилятор не знает, как преобразовать IProcess<T> в IProcess.

. Одним из возможных решений является добавление неуниверсального интерфейса и наследование универсального интерфейса от него:

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


public interface IProcess<T> : IProcess where T : class
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...