0

我知道这个错误是什么,我的问题略有不同。

这是这些大脑褪色的时刻之一。

我一直在阅读这篇关于存储库和工作单元模式的有趣文章:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-应用程序

我正在玩这个代码,现在我正在尝试调整它,以便我可以将 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

提前谢谢了!

4

2 回答 2

0

简而言之,您应该将该字段声明为接口类型。该接口的名称可能类似于IGenericRepository<T>. 然后该类GenericRepository<T>应该实现该接口。然后你用你的 IoC 框架注册这个类,它基本上告诉框架,“当我请求这个接口的一个实例时,给我一个那个类的实例”。然后你做这样的事情:

this.departmentRepository = InversionOfControl.Resolve<IGenericRepository<Department>>();

(resolve 方法有一个类似的签名public T Resolve<T>()

于 2012-07-20T03:43:57.390 回答
0

http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle

似乎 GenericRepository 是无法实例化的抽象类。

http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx

您需要 GenericRepository 的派生类,即

DepartmentRepository : GenericRepository<Department>
于 2012-07-20T03:48:31.110 回答