У меня есть несколько классов, которые реализуют один и тот же интерфейс.
interface IBidManager<E> where E : IEntity
public class BidManager : IBidManager<EntityObject1>
public class BidManager2 : IBidManager<EntityObject2>
public class BidManager3 : IBidManager<EntityObject3>
В моем классе бизнес-менеджера у меня есть:
public class BusinessManager : ManagerBase
{
private IBidManager<IEntity> _bidLogicManager;
...
В BusinessManager есть функция, которую я вызываю для изменения_bidLogicManager (MyType - это перечисление)
public void SetLogic(MyType auctionType)
{
switch (MyType)
{
case AuctionType.Classic:
_bidLogicManager = (IBidManager<IEntity>)new BidManager();
break;
...
IEntity - пустой интерфейс, который я использую со своими классами POCO, сгенерированными t4 и платформой Entity.
Я мог бы поклясться, что это работает, но я попробовал еще раз, и его ошибка выдачи sayng:
Unable to cast object of type 'BLL.MyManagers.BidManager' to type 'BLL.BidManagers.IBidManager`1[Entities.IEntity]'.
Когда я удаляю (IBidManager), Visual Studio сообщает мне, что явное преобразование существует ... но что это?
Я не хочу определять тип при создании класса BusinessManager следующим образом:
public class BusinessManager<E> : ManagerBase where E : class, IEntity
{
IBidManager<E> _bidLogicManager;
Кроме того, я не могу создать функцию в Бизнес-менеджере, которая принимает аргумент IBidManager<E>
, так как это n-слойприложение asp.net и я не хочу, чтобы слой пользовательского интерфейса знал что-либо о IBidManager