我知道这个错误是什么,我的问题略有不同。
这是这些大脑衰退时刻之一。
我一直在读这篇关于Repositoy和工作单元模式的有趣文章:
我正在使用此代码,我现在正在尝试调整它,以便我可以将IoC与DI一起使用。
现在,我刚刚在这里找到了精神上的空白。
我正在更改所有类以使用接口等。所以给出了这段代码片段:
public class UnitOfWork : IDisposable
{
private SchoolContext context = new SchoolContext();
private GenericRepository<Department> departmentRepository;
private GenericRepository<Course> courseRepository;
public GenericRepository<Department> DepartmentRepository
{
get
{
if (this.departmentRepository == null)
{
this.departmentRepository = new GenericRepository<Department>(context);
}
return departmentRepository;
}
}
}
}
如何编辑此行:
this.departmentRepository = new GenericRepository<Department>(context);
所以我不必引用实际的类,所以我可以确保它被解耦并避免产生语法错误:
Cannot create an instance of the abstract class or interface interface with type
非常感谢提前!
答案 0 :(得分:0)
简而言之,您应该将该字段声明为接口类型。界面可以具有IGenericRepository<T>
之类的名称。然后类GenericRepository<T>
应该实现该接口。然后你用你的IoC框架注册这个类,它基本上告诉框架,“当我要求这个接口的实例时,给我一个该类的实例”。然后你做这样的事情:
this.departmentRepository = InversionOfControl.Resolve<IGenericRepository<Department>>();
(解析方法的签名类似于public T Resolve<T>()
)
答案 1 :(得分:0)
似乎GenericRepository是无法实例化的抽象类。
http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx
您需要GenericRepository的派生类,即
DepartmentRepository : GenericRepository<Department>