Я пытаюсь решить довольно большую (для меня) проблему, с которой столкнулся при написании своего приложения. Посмотрите на это, пожалуйста (я постараюсь сократить код для простоты):
У меня есть корневой интерфейс с именем IRepository<T>
. Далее, IBookRepository : IRepository<Book>
Далее, конкретный класс, который его реализует: BookRepository : IBookRepository
В классе RepositoryManager я объявил private IRepository<IRepoItem> currentRepo;
IRepoItem
— это интерфейс, реализованный классом Book.
Теперь, когда я пытаюсь сделать что-то вроде этого:
currentRepo = new BookRepository();
VisualStudio выдает сообщение об ошибке:
Невозможно неявно преобразовать тип BookRepository в IRepository. Существует явное преобразование (вам не хватает приведения?)
Я пытался выполнить явное приведение, но выдается исключение во время выполнения...
Я знаю (почти точно), что это то, что называется ковариацией, и это (вероятно) решено в .Net 4.0. К сожалению, я пишу с использованием фреймворка версии 3.5 и не могу это изменить. Пожалуйста, дайте мне несколько советов, что делать - как обойти эту проблему? Я хотел бы получить currentRepo от RepoFactory, который будет создавать несколько видов репозиториев в зависимости от потребностей пользователя. Я не знаю, разрешены ли здесь ссылки, но я веду какой-то блог на http://olgatherer.wordpress.com/ где я описываю создание приложения. Мой английский не очень хорош, но я надеюсь, что этого достаточно, чтобы понять меня. Заранее спасибо за ответ.
С уважением, skrzeczowas