Проблема инъекции зависимостей C # - PullRequest
4 голосов
/ 01 июля 2010

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

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

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

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

чтобы он мог возвращать данные типа E. Тип «E» будет объектом POCO, созданным с помощью Entity Framework v4.

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

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

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

Я попытался поместить <object> вместо <??>, но он не смог привести мой тип сущности poco.

Я попытался, чтобы мои сущности реализовали пустой интерфейс 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

приводит к той же ошибке.

1 Ответ

4 голосов
/ 01 июля 2010

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

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, и каждый из них имеет интерфейс, тогда вам потребуетсяукажите where E : class, IEntity на уровне класса.В противном случае вы должны использовать конкретный тип для общего аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...