我们有很多具有这种设计的对象:接口和几个实现,以及通过组合使用多个对象。示例: Foo 实现了 IFoo 并有一个 Bar 对象,该对象实现了 IBar Foo 也有一个用于注入依赖项的 setBar(IBar bar) 方法。
我的问题是:setter 不在界面中?(为了测试,嘲笑......我被卡住了!)
在界面中有一个设置器只是为了模拟和测试是不好的。因此,您允许该接口的用户任意设置组件,即使该对象的属性在构造后可能不应该被修改。接口不应该揭示如何构造对象。
如果您使用多态性,即在接口类型上调用setter,那么显然您需要在接口中使用它。
使用 setter Injection 将 Bar 注入 Foo。在没有 Bar 的情况下 Foo 不能存在的情况下,将 Bar 注入构造函数会更合适。
进一步阅读:依赖注入的类型