我应该如何将依赖项传递给我的类?

Posted

技术标签:

【中文标题】我应该如何将依赖项传递给我的类?【英文标题】:How should I pass Dependencies to my Class? 【发布时间】:2021-01-02 03:38:22 【问题描述】:

我有一个类依赖于通过 Autofac 注入的大量依赖项。 这是一个例子:

public MyService(
        IService1 service1,
        IService2 service2,
        ...)
        
          _service1 = service1;
          _service2 = service2
        

我需要传递大约 10 个依赖项。我们现在实现了 SonarQube,抱怨很多 Constructor 参数。

是否有另一种“更好/首选”的方式来传递这些依赖项以使 SonarQube 满意?

【问题讨论】:

将它们捆绑到一个类 DependencyPackage 中,你只有一个参数。 SonarQube 可能会更快乐 ;) @Mong 这只是在推卸责任。现在DependencyPackage 的构造函数将具有相同数量的参数... 如果一个类有 10 个依赖项,它可能做的太多,因此难以维护和测试,这正是 SonarQube 试图告诉你的。您需要对其进行重构以消除此警告。 您是否真的因为依赖的数量而遇到问题?代码分析应该是一种工具,可以帮助突出显示由于某种原因而有问题的代码。所以问题应该是如何让快乐,而不是SonarQube。 @CodeCaster “这只是在推卸责任。”,“如果一个类有 10 个依赖项,它可能做的太多,因此难以维护和测试,”真实的话!谢谢提醒 【参考方案1】:

虽然检查你的依赖布局以确保你的依赖“树”尽可能简单总是好的,但有时你只需要传入相当多的依赖。

为了帮助简化这一点,您可以考虑使用Aggregate Services 包。

它将允许您定义一个包含依赖项的接口,然后注入该接口,而无需自己定义整个其他类。

【讨论】:

这听起来不错,似乎暂时解决了我的问题,直到我们进行全面重构

以上是关于我应该如何将依赖项传递给我的类?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle,如何禁用所有传递依赖

如何将库依赖项添加到 Build.scala 的类路径?

Maven:我应该保留还是删除声明的依赖关系,它们也是传递依赖关系?

在向外部依赖项添加扩展时中止陷阱6

如何将 Google 视觉依赖项添加到我的 .aar?

如何查看 mvnrepository.com 的传递依赖项?