将一个服务注入另一个服务

New*_*ewm 12 c# asp.net-mvc dependency-injection service-layer

我有一个 MVC 项目,它有两个服务:OrganizationService 和AgreementService,我的问题是某些组织属于组/父结构,在这种情况下,我需要获取属于其中任何组织的所有协议群组。

我的 OrganizationService 中已经有一个方法,可以返回结构内组织的所有 id 列表:

IEnumerable<int> GetRelatedOrganisationIds(int id)
Run Code Online (Sandbox Code Playgroud)

我可以在AgreementService中创建一个方法来接受此结果,但随后我需要将这两个服务注入我的控制器并依次调用它们,例如

GetAgreementsByOrganisationIdList(IEnumerable<int> organisationIdList)
Run Code Online (Sandbox Code Playgroud)

是否可以将OrganizationService注入到AgreementService中,以便它可以自己完成工作?例如,以下方法将在内部调用 GetRelatedOrganizationIds:

GetAgreementsByOrganisationId(int id)
Run Code Online (Sandbox Code Playgroud)

我想将其注入到AgreementService 中的另一个原因是,我不需要记住检查组织是否处于组/父关系中,也不需要在每次想要获取协议列表时查找ID。

我还考虑过创建一个 OrganizationGroupParentInformationProvider 并将其注入到AgreementService 中,我可能花了太多时间思考这个......你会怎么做?

Fac*_*tio 8

是的,将一个服务注入到另一个服务的构造函数中是可以的。但是,您可能需要考虑为 OrganizationService 创建一个接口,并让您的 ContractService 依赖于该抽象。

另一种方法是创建一个依赖于AgreementService 和OrganizationService 的新服务,并让该新服务履行职责。新服务当然会被注入到您的控制器中。

作为指导,请考虑将所有内容都放在AgreementService 下是否会违反单一职责原则和/或接口隔离原则。如果是这样,请创建新服务。