Asp.net mvc 3 将通用存储库与IOC容器挂钩

Asp.net mvc 3 将通用存储库与IOC容器挂钩,asp.net-mvc-3,unity-container,autofac,Asp.net Mvc 3,Unity Container,Autofac,我正在尝试创建一个通用的存储库模式,在这里我可以使用ORM技术,但是我在尝试与IOC容器挂钩时遇到了这个问题 public interface IRepository<T> { //members } 公共接口IRepository { //成员 } 对于NHbernate来说,这很好 public class FNHRepository<T>: IRepository<T> { //members } public类fnhres

我正在尝试创建一个通用的存储库模式,在这里我可以使用ORM技术,但是我在尝试与IOC容器挂钩时遇到了这个问题

 public interface IRepository<T>  
 {
      //members
 }
公共接口IRepository
{
//成员
}
对于NHbernate来说,这很好

public class FNHRepository<T>: IRepository<T> 
{ //members }
public类fnhrespository:IRepository
{//members}
但对于实体,我不得不添加where子句

public class EFRepository<T> : IRepository<T> where T : class 
{
公共类eRepository:IRepository,其中T:class
{
如果我省略了“where子句”,我就做不到

dbset = DataContext.Set<T>() ; 
dbset=DataContext.Set();
表示只有引用类型才能用作T

当我试图将IRepository与国际奥委会挂钩时,问题就来了,就像这样

.RegisterType(typeof(IRepository<>), typeof(EFRepository<>)); 
.RegisterType(typeof(IRepository)、typeof(eRepository));
如果实现类具有,其中T:class,我将无法钩住接口,我将获得以下执行选项


异常为:InvalidOperationException-当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构造。是否缺少类型映射


收到任何帮助后,我尝试了Unity和Autofac,得到了相同的错误

不确定Unity,但您应该能够注册一个带有约束的泛型类

builder.RegisterGeneric(typeof(EFRepo...))
    .AsImplementedInterfaces();
但问题是:如果接口上没有相同的约束条件,这肯定会失败:

container.Resolve<IRepo<int>>();
container.Resolve();

尝试向您的接口添加相同的限制。我最初是这样开始的,但当我添加“where T:class”时,ioc挂钩抛出errorInvalidOperationException-当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构造。您是否缺少类型映射显示显示行为的内部异常ual details[System.InvalidOperationException]={“当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构造。是否缺少类型映射?”}我添加了builder.RegisterAssemblyTypes().AsImplementedInterfaces();仍然收到错误,我认为错误消失了,但仍然存在