如何正确使用依赖注入?

mik*_*e00 3 c# oop dependency-injection ninject

简单案例:我有一个用于记录消息的接口,如下所示:

public interface ILogger
{
   void Log(string message);
}
Run Code Online (Sandbox Code Playgroud)

也许有三个不同的类实现了这个接口.

现在,我可以在一个地方写一行,换行,比如:

kernel.Bind<ILogger>().To<ConsoleLogger>();
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在许多类中使用该接口,但不通过构造函数注入每个人.因为我们可以使用这么多不同的接口,并且该类构造函数的声明可能很混乱.

Not*_*ple 5

在构造函数中有太多注入的项目是代码味道.这通常意味着您的班级不仅仅扮演一个角色.该单责任心原则说,每类应该只有一个目的,这是完全封装在类.

  • 如果你需要在许多类中注入ILogger,你可能已经违反了SRP,因为日志记录是一个跨领域的问题,并且在许多情况下应该使用拦截建模或(甚至更好)使用装饰器建模. (2认同)