将服务注入另一个服务

时间:2013-12-05 19:16:31

标签: c# asp.net-mvc dependency-injection service-layer

我有一个MVC项目,它有两个服务,一个是OrganisationService和一个AgreementService,我的问题是有些组织属于一个组/父结构,在这种情况下,我需要得到属于任何一个的所有协议。集团内的组织。

我的OrganisationService中已经有一个方法可以返回结构中组织的所有ID列表:

IEnumerable<int> GetRelatedOrganisationIds(int id)

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

GetAgreementsByOrganisationIdList(IEnumerable<int> organisationIdList)

是否可以将OrganisationService注入AgreementService,以便它可以自行完成工作?例如,以下方法将在内部调用GetRelatedOrganisationIds:

GetAgreementsByOrganisationId(int id)

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

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

2 个答案:

答案 0 :(得分:3)

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

另一种方法是创建一个依赖于AgreementService和OrganisationService的新服务,并让新服务承担责任。新服务当然会注入您的控制器。

如需指导,请考虑在AgreementService下是否全部违反单一责任原则和/或接口隔离原则。如果是这样,请提供新服务。

答案 1 :(得分:2)

  

将OrganisationService注入AgreementService是否可以自行完成工作?

那不会注入它。这将使它成为一种依赖。无论如何,我会说你拥有它的方式是一个更好的架构,因为它更容易测试。通过让协议服务自己调用组织服务,它肯定不太可测试,因为你将不得不注入组织服务的实例。