2011-09-28 18 views
0

我试图创建一个通用的存储库模式,我可以于swtich ORM垃圾技术,但试图与IOC容器挂钩挂钩通用资源库使用IOC容器

public interface IRepository<T> 
{ 
     //members 
} 

对于NHbernate这工作得很好,当我偶然发现了这个问题

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

但对于实体我不得不添加where子句

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

如果我omiting的“where子句”我不能够做

dbset = DataContext.Set<T>() ; 

只说引用类型可以用来为T

问题是当我试图钩IRepository与国际奥委会,类,我正在以下execption

:像这样

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

如果implemeting类是有其中T我不能挂钩接口

xception是:InvalidOperationException - 当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构建。你是否缺少类型映射?

任何帮助appriciated,我想这与团结和Autofac并得到同样的错误

+0

尝试添加相同限制你的界面。 – jgauffin

+0

我原来是这样开始的,但是当我添加'where T:class'时,ioc hooking throwing error – Madavan

+0

什么样的错误? – jgauffin

回答

0

不确定统一,但你应该能够约束就好注册一个泛型类。

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

的问题,虽然是这样的:没有在接口上同样的限制,这是注定要失败:

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

我添加了builder.RegisterAssemblyTypes()。AsImplementedInterfaces();仍然得到错误,我认为错误消失了,但仍然存在 – Madavan