抽象的依赖注入 class

Depenendcy Injection with abstract class

以这个简单的抽象为例,其中抽象 class 具有通用逻辑的实现,而派生的 classes 具有抽象方法的覆盖。

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");
    }
}

为了使用派生的 classes 之一:

Cat cat = new Cat();
cat.Sound(); // Overriden logic
cat.Sleep(); // Common logic

我的问题是在使用依赖注入时这将如何转换。在这里我知道如何注册依赖项并通过构造函数注入将它们传递到 class 中。然而让我感到困惑的是,DP 使用接口来解耦实现。显然,上面的例子不是这种情况,所以为了能够注入任何一个派生的 classes,它会像继承自一个看起来像什么的接口的基础 class 一样简单吗像这样:

public interface IAnimal {
    void Sound()'
    
    void Sleep();
}

这种方法有什么问题吗,因为它提供了对通用逻辑的访问,同时仍然支持独特的行为?当两个 classes 共享公共逻辑但需要自己实现特定方法时,是否有更好的解决方案或设计模式可以使用。

很明显,但为什么不让抽象 class 继承接口?然后在 DP 中,您可以像往常一样为该接口传递任何 child class 的寄存器。