如何使用Simple Injector将依赖项注入Base类?

时间:2017-03-19 04:25:59

标签: c# dependency-injection simple-injector

如何在SimpleInjector容器中注册Rectangle接口,同时将ILogger注入其基类Shape

这样做的目的是使派生类不关心ILoggerILogger是一种基础结构服务,用于将某些值记录到文件中以进行调试。

public class Shape : IShape
{
    public void Shape(ILogger logger){}
    public virtual void Draw(){}
}

public class Rectanble : Shape
{
    public void Reactangular();
    public override void Draw(){}
}

1 个答案:

答案 0 :(得分:2)

要实现这一点,您必须通过派生类的构造函数公开logger:

public class Rectangle : Shape
{
    public Rectangle(ILogger logger) : base(logger) { }
    public override void Draw(){}
}

请注意,处理交叉问题(如日志记录)的基类是违反单一责任原则的强烈指示。这些基类很容易变成包含大量依赖关系的不断变化的类,使派生类更难以测试和维护。

使用装饰器实现横切关注点通常要好得多,而不是让基类具有依赖关系。这使基类保持干净,甚至通常允许完全删除基类(或者使其纯粹抽象,或者用接口替换它)。