抽象的依赖注入 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 的寄存器。
以这个简单的抽象为例,其中抽象 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 的寄存器。