Проблема Внедрения зависимости C#

У меня есть 3 класса: A, B, и C

Все эти классы реализуют интерфейс IMyInterface

Я хотел бы, чтобы интерфейс был определен как так:

internal IMyInterface<E> where E: class
{
    E returnData();
}

Так, чтобы это могло возвратить данные типа E. Тип "E" будет ПОСТЕПЕННО объект, созданный с Платформой Объекта v4.

В отдельном классе я имею:

public class MyClass()
{
   IMyInterface<??> businessLogic;

   public setBusinessLogic(IMyInterface<E> myObject)
       where E : class
   {
       businessLogic = myObject;
   }
}

Я пытался поместить <object> вместо <??> но это не могло бросить мой постепенно тип объекта.

Я пытался иметь свою реализацию объектов пустой интерфейс IEntity затем использование

IMyInterface<IEntity> businessLogic;
...
businessLogic = new A<POCOObject>();

результаты в:

 Cannot implicitly convert type
 'A<POCOObject>' to
 'IMyInterface<IEntity>'. An explicit
 conversion exists (are you missing a
 cast?)

Какие-либо рекомендации?

Править: Я попытался объявить свой A, B, и классы C как:

internal class A : IBidManager<EntityObjectType>

и

internal class A<E> : IBidManager<E> where E : class

результаты по той же ошибке.

5
задан Chris Klepeis 30 June 2010 в 22:30
поделиться

1 ответ

Это должно быть либо

public class MyClass<E> where E : IEntity, class
{
   IMyInterface<E> businessLogic;

   public setBusinessLogic(IMyInterface<E> myObject)
   {
       businessLogic = myObject;
   }
}

, либо

 public class MyClass
{
   IMyInterface<POCOObject> businessLogic;

   public setBusinessLogic(IMyInterface<POCOObject> myObject)
   {
       businessLogic = myObject;
   }
}

. Если ваш бизнес-объект должен обрабатывать любой объект POCO, и каждый из них имеет интерфейс, вам нужно будет указать , где E: class, IEntity на уровне класса. В противном случае вы должны использовать конкретный тип для общего аргумента

4
ответ дан 15 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: