1

我想知道是否有一些最佳实践来为抽象组件提供依赖关系。

假设我有这样的模板方法算法:

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 容器。

4

2 回答 2

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;
    }
}
于 2014-02-14T17:40:38.770 回答
1

您的具体实现可以通过其构造函数声明一个强制依赖项,该依赖项又将传递给基础构造函数,如 im1dermike 所示。

或者,如果它是可选依赖项,您可以在基类上声明该属性,如果可以,Windsor 将填充。

于 2014-02-15T11:39:42.163 回答