对于诸如日志记录器、安全性、配置等基础设施项目,它们是否真的应该注入到每个需要它们的类中,还是应该将它们注入到服务定位器中,然后类可以使用服务定位器来解决依赖关系(或其他机制)?
在我的看法中,所有的类都必须通过DI满足依赖关系,这看起来确实非常荒谬。我认为这是一种代码味道。我可以理解类似存储库或服务代理/连接器等内容,但不包括日志记录。
对于诸如日志记录器、安全性、配置等基础设施项目,它们是否真的应该注入到每个需要它们的类中,还是应该将它们注入到服务定位器中,然后类可以使用服务定位器来解决依赖关系(或其他机制)?
在我的看法中,所有的类都必须通过DI满足依赖关系,这看起来确实非常荒谬。我认为这是一种代码味道。我可以理解类似存储库或服务代理/连接器等内容,但不包括日志记录。
use property injection and set the default in the ctor. for example
class foo
{
public ILogger Logger {get;set;}
public foo()
{
Logger = NullLogger.Instance;
}
}
Castle.DynamicProxy
or custom .Net Attribute for more ideas on this approach.然后就有一个问题,为什么会有这么多基础设施的问题注入到组件中呢?你所描述的被认为是交叉关注点,通常可以通过某种AOP(面向切面编程)来处理,以便在核心系统中减少大量重复。
您可能会发现我的IoC介绍有用。通常我会同意您关于AOP的看法,但我不喜欢运行时AOP框架,而且团队不理解AOP概念。他们几乎不了解IoC概念