【问题标题】:.Net Dependency injection in unit of work pattern using repositories.Net 使用存储库的工作单元模式中的依赖注入
【发布时间】: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&lt;T&gt; != IRepository 必须有另一个接口声明了没有定义提交方法的泛型。
  • 但它也说:public interface IRepository&lt;T&gt; :IRepository where T : class { } 所以这有点令人困惑。
  • 我相信在这种情况下,Submit 方法未定义,因为它是特定于实现的,并且答案具体与如何关联 UoW 和存储库有关,而不是与特定实现相关:注意 UoW 代码确实调用了 Submit - _repositories.ToList().ForEach(x =&gt; x.Value.Submit());

标签: c# dependency-injection unity-container


【解决方案1】:

您链接到的问题是确保工作单元始终了解存储库的解决方案;存储库实现本身毫无用处!存储库至少应该公开所有 crud 操作的方法:

public interface IRepository<TEntity, in TKey> where TEntity : class
{
    TEntity Read(TKey id);
    TEntity Add(TEntity entity);
    TEntity Update(TEntity entity);
    void Delete(TKey id);
}

例如参见this 文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2023-03-23
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多