【发布时间】:2021-09-01 05:23:17
【问题描述】:
以这个简单的抽象示例为例,抽象类具有通用逻辑的实现,而派生类具有抽象方法的覆盖。
public abstract class Animal {
public abstract void Sound();
public void Sleep() {
Console.WriteLine("Zzz");
}
}
public class Cat : Animal {
public override void Sound() {
Console.WriteLine("Meow");
}
}
public class Dog : Animal {
public override void Sound() {
Console.WriteLine("Woof");
}
}
为了使用派生类之一:
Cat cat = new Cat();
cat.Sound(); // Overriden logic
cat.Sleep(); // Common logic
我的问题是在使用依赖注入时这将如何转换。在这里,我知道如何注册依赖项并通过构造函数注入将它们传递给一个类。然而让我感到困惑的是,DP 使用接口来解耦实现。显然上面的例子不是这样的,所以为了能够注入任何一个派生类,它是否像从一个看起来像这样的接口继承的基类一样简单:
public interface IAnimal {
void Sound()'
void Sleep();
}
这种方法有什么问题吗,因为它提供了对通用逻辑的访问,同时仍然启用了 unqiue 行为?当两个类共享公共逻辑但需要自己的特定方法实现时,是否有更好的解决方案或设计模式可以使用。
【问题讨论】:
-
However what confuses me, is that DP uses interfaces to decouple the implementation.不一定。你可以依赖一个类而不是一个接口。 -
为什么一个类会依赖
Animal而不是Cat? -
我记得有人说依赖注入是 5 美分概念的 25 美元术语。您的示例对于依赖注入并没有真正意义,毕竟它的原则是“我不在乎谁负责创建
Cat,我只想听它喵喵叫。” - 并且那个类(不是从Animal派生的)丢失了。这是关于调用某事,而不是定义其行为。
标签: c# dependency-injection abstraction