首页 > 解决方案 > 即使类不拥有这些依赖项,但在方法中使用它们,您是否在构造函数中注入依赖项?

问题描述

如果一个School类依赖于一个EmailSender类,您可能必须EmailSender通过它的构造函数注入它,该类具有通用接口,例如IMessagableorIMessageSender甚至IEmailSender,以便将来可以将其换成其他东西。

为此,您将在类中创建一个只读私有字段School

但是你是说School HAS-A MessageSender,但它肯定只是在它的一些方法中使用它?

标签: c#dependency-injectionsolid-principlesdependency-inversion

解决方案


类声明的任何属性/成员都是类具有的东西。

Has-A 在这里与继承的 Is-A 区分开来。

uses-a 属性更多地与类凝聚力而不是组合相关。如果该类具有-A 属性但它不使用它,或者在一小部分函数中使用它,则它的内聚性低。

HAS-A 和 IS-A 都是类的依赖项。这就是为什么我们努力将它们都作为抽象,将两者松散耦合。

没有您的类将无法编译的任何类/接口定义都是依赖项。即使它没有 HAS-A 关系并且它只是作为函数参数传递。


推荐阅读