我正在尝试创建一个通用的存储库模式,我可以在其中打开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
当我试图将IRepository与IOC挂钩时,问题就出现了,就像这样
.RegisterType(typeof(IRepository<>), typeof(EFRepository<>));
如果实现类的其中T:class ,我无法挂钩界面,我得到以下执行
xception is:InvalidOperationException - 当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构造。你错过了类型映射吗?
任何帮助appriciated,我尝试使用Unity和Autofac并得到相同的错误
答案 0 :(得分:0)
不确定Unity,但是你应该能够注册一个带有约束的泛型类。
builder.RegisterGeneric(typeof(EFRepo...))
.AsImplementedInterfaces();
问题是这样的:在接口上没有相同的约束,这必然会失败:
container.Resolve<IRepo<int>>();