我想知道是否有一些最佳实践来为Abstract组件提供依赖项。
假设我有这样的模板方法算法:
public abstract class TemplateMethod
{
protected abstract void StepA();
protected abstract void StepB();
protected abstract void StepC();
public void Go()
{
StepA();
StepB();
CommonLogic();
StepC();
}
private CommonLogic()
{
myDependency.DoSomething();
}
}
我还没有设法将 myDependecy 注入到类中,因为抽象的TemplateMethod当然永远不会被实例化。 我已设法为其提供服务位置,但我确信有更好的方法可以做到这一点。
有什么想法吗?
PS使用 Castle Windsor 作为IoC容器。
答案 0 :(得分:3)
仅仅因为抽象类无法直接实例化并不意味着它不能拥有构造函数。您可以使用普通构造函数注入抽象类(请测试)。如果不能,可以将依赖项传递给基类,如下所示:
public class ChildClass: TemplateMethod
{
public ChildClass(IMyDependencyType myDependency) : base(myDependency) {}
}
public abstract class TemplateMethod
{
protected IMyDependencyType myDependency;
protected TemplateMethod(IMyDependencyType myDependency)
{
this.myDependency = myDependency;
}
}
答案 1 :(得分:1)
你的具体实现可以通过它的构造函数声明一个强制依赖,而构造函数又会像im1dermike所示那样传递给基础构造函数。
或者,如果它是一个可选的依赖项,你可以在基类上声明属性,如果可以的话,Windsor将填充。