[英]How can I inject dependencies to the Base class with Simple Injector?
如何在SimpleInjector容器中注册Rectangle
接口,同时将ILogger
注入其基类Shape
?
这样做的目的是使派生类不关心ILogger
。 ILogger
是一种基础结构服务,用于将某些值记录到文件中以进行调试。
public class Shape : IShape
{
public void Shape(ILogger logger){}
public virtual void Draw(){}
}
public class Rectanble : Shape
{
public void Reactangular();
public override void Draw(){}
}
要实现这一点,您必须通过派生类的构造函数公开logger:
public class Rectangle : Shape
{
public Rectangle(ILogger logger) : base(logger) { }
public override void Draw(){}
}
请注意,处理诸如日志记录等跨领域问题的基类是违反单一责任原则的强烈迹象 。 这些基类很容易变成包含大量依赖关系的不断变化的类,使得派生类更难以测试和维护。
与使用具有依赖关系的基类相比,使用装饰器实现横切关注通常要好得多。 这使基类保持干净,甚至通常允许完全删除基类(或者使其纯粹抽象,或者用接口替换它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.