2

我正在尝试在我的服务类中使用工作单元模式。
我有我的 CompanyService 课程

public class CompanyService: ICompanyService
{
    private readonly ICompanyRepository _companyRepository;

    public CompanyService(ICompanyRepository companyRepository)
    {
        _companyRepository = companyRepository;
    }

    public void CreateCompany(Company company)
    {
        _companyRepository.Add(company);
        //I want to have unit of work commit here!!! 
        //unitofwork.commit(); 
    }

    public void UpdateCompany(Company company)
    { etc...}

如果我的 IUnitOfWork 在我的数据层而不是在我的域层中,我如何在我的 ServiceClass 中注入 UnitOfWork 的实例?我应该在我的域层中有一个 IUnitOfWork 吗?我只是觉得这听起来不太对...

4

2 回答 2

3

我应该在我的域层中有一个 IUnitOfWork 吗?

如果您的领域层需要它,那么答案肯定是:是的。

领域层应该包含它需要工作的一切。您需要记住的唯一一件事是,该层不应引用任何外部库,也不应与任何技术特定实现相关联。

IRepositoryIUnitOfWork的具体实现将位于基础设施/数据层中的某个位置,您可以在其中引用您想要的任何框架(实体框架,...)

看看这个SO answer,我在其中解释了需要在 Doamin 层中定位的内容(这是一个与 Onion 架构相关的问题,但没关系)。
看看这个SO answer,你会找到一种轻松实现 UnitOfWork 和 Repository 模式的方法。

于 2013-07-15T08:55:03.983 回答
1

您可以在数据层和域层中注入相同的 UoW 实例。负责 UoW 范围界定和提交的是应用程序服务,而不是域服务。另请参阅工作单元、实体框架和核心服务

于 2013-07-16T02:25:56.917 回答