Подключение общего репозитория с контейнером IOC - PullRequest
0 голосов
/ 28 сентября 2011

Я пытаюсь создать общий шаблон репозитория, в котором я могу использовать технологии ORM, но я наткнулся на эту проблему при попытке подключиться к контейнеру IOC

 public interface IRepository<T>  
 {
      //members
 }

Для NHbernate это прекрасно работает

public class FNHRepository<T>: IRepository<T> 
{ //members }

Но для Entity я вынужден добавить пункт where

public class EFRepository<T> : IRepository<T> where T : class 
{

если я опускаю фразу where, я не могу сделать

dbset = DataContext.Set<T>() ; 

говоря, что в качестве T * 1013 можно использовать только ссылочный тип

Проблема возникает, когда я пытаюсь подключить IRepository к IOC, как это

.RegisterType(typeof(IRepository<>), typeof(EFRepository<>)); 

Я не могу подключить интерфейс, если реализующий класс имеет , где T: class , я получаю следующее исполнение

xception is: InvalidOperationException - Текущий тип, System.Web.Mvc.IControllerFactory, является интерфейсом и не может быть создан. Вам не хватает отображения типов?

Любая помощь оценена, я пробовал это с Unity и Autofac и получал ту же ошибку

1 Ответ

0 голосов
/ 28 сентября 2011

Не уверен насчет Unity, но вы должны иметь возможность зарегистрировать универсальный класс с ограничениями.

builder.RegisterGeneric(typeof(EFRepo...))
    .AsImplementedInterfaces();

Проблема, однако, заключается в следующем: без того же ограничения на интерфейс это обязательно приведет к сбою:

container.Resolve<IRepo<int>>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...