Я работаю в общей реализации репозитория с Entity Framework v4, и хранилище должно быть разрешено Виндзорским контейнером .
Сначала интерфейс,
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
T Find(int key)
}
Затем конкретный класс реализует интерфейс
public class Repository<T> : IRepository<T> where T: class
{
private IObjectSet<T> _objectSet;
}
Так что мне нужно _objectSet
, чтобы делать подобные вещи в предыдущем классе,
public void Add(T entity)
{
_objectSet.AddObject(entity);
}
И теперь проблема, как вы можете видеть, я использую интерфейс Entity Framework, например IObjectSet
, чтобы выполнить работу, но этот тип требует ограничения для универсального типа T "where T: class".
Это ограничение вызывает исключение, когда Виндзор пытается разрешить свой конкретный тип.Конфигурация Windsor выглядит следующим образом.
<castle>
<components>
<component id="LVRepository"
service="Repository.Infraestructure.IRepository`1, Repository"
type="Repository.Infraestructure.Repository`1, Repository"
lifestyle="transient">
</component>
</components>
</castle>
Контейнер разрешает код:
IRepository<Product> productsRep =_container.Resolve<IRepository<Product>>();
Теперь получаю исключение:
System.ArgumentException: GenericArguments[0], 'T', on 'Repository.Infraestructure.Repository`1[T]' violates the constraint of type 'T'. ---> System.TypeLoadException: GenericArguments[0], 'T', on 'Repository.Infraestructure.Repository`1[T]' violates the constraint of type parameter 'T'.
Если я удалюограничение в конкретном классе и зависимость от IObjectSet (если я не делаю этого, я получаю ошибку компиляции), все работает FINE, поэтому я не думаю, что это проблема с контейнером, но IObjectSet
ДОЛЖЕН вреализация.
Как мне решить эту проблему?