【发布时间】:2015-08-25 20:29:56
【问题描述】:
我是依赖注入概念的相对新手,并且在开始新项目之前一直在尝试收集最佳实践。
查看Dependency injection in unit of work pattern using repositories 的最佳答案,我理解这种方法,但示例代码似乎缺少一些东西,我很难过......
接口IRepository的定义如下:
public interface IRepository
{
void Submit();
}
但是当接口用作GenericRepository类的定义的一部分时,Submit方法并没有实现:
public abstract class GenericRepository<T> : IRepository<T> where T : class
{
public GenericRepository(IUnitOfWork unitOfWork)
{
unitOfWork.Register(this);
}
}
然后,定义特定实体的存储库类,继承自 GenericRepository:
public class DepartmentRepository : GenericRepository<Department>
{
public DepartmentRepository(IUnitOfWork unitOfWork): base(unitOfWork) { }
}
我的问题是,鉴于每个不同实体的存储库可能需要对不同 DataContext 的引用,应该如何使用 DI 实现通用 Submit() 方法?
【问题讨论】:
-
IRepository<T>!=IRepository必须有另一个接口声明了没有定义提交方法的泛型。 -
但它也说:
public interface IRepository<T> :IRepository where T : class { }所以这有点令人困惑。 -
我相信在这种情况下,Submit 方法未定义,因为它是特定于实现的,并且答案具体与如何关联 UoW 和存储库有关,而不是与特定实现相关:注意 UoW 代码确实调用了 Submit -
_repositories.ToList().ForEach(x => x.Value.Submit());
标签: c# dependency-injection unity-container