使用 Ninject 的多重依赖注入

Multiple Dependency Injection using Ninject

我正在尝试使用 Ninject 进行多重依赖注入。 我有 3 个 classes,EmailHelperExceptionHelperReportHelperExceptionHelper class 需要 EmailHelperReportHelper 需要 ExceptionHelper。这是我的代码。

IKernel _kernel = new StandardKernel();
_kernel.Load(Assembly.GetExecutingAssembly());

IEmailHelper _emailHelper = _kernel.Get<IEmailHelper>(); 

ExceptionHelper exceptionHelper = new ExceptionHelper(_emailHelper);
ReportHelper reportHelper       = new ReportHelper(exceptionHelper);

ExceptionHelperIEmailHelper 似乎松耦合,但 ReportHelperExceptionHelper 仍然紧密耦合。

如何使 ReportHelperExceptionHelper 松耦合?

我可以这样修改我的代码吗?

IExceptionHelper _exceptionHelper = _kernel.Get<IExceptionHelper>();
ReportHelper reportHelper = new ReportHelper(_exceptionHelper);

但是IExceptionHelper不是用IEmailHelper发起的吗? 我很困惑。

[已编辑]

这是我的 ExceptionHelper 构造函数。其余构造函数具有相同的结构。

private IEmailHelper _emailHelper;
public ExceptionHelper(IEmailHelper eh)
{
    _emailHelper = eh;
}

您的 类 的构造函数应该如下所示:

public ExceptionHelper(IEmailHelper email_helper)
{
    m_EmailHelper = email_helper;
}

public ReportHelper(IExceptionHelper exception_helper)
{
    m_ExceptionHelper = exception_helper;
}

然后你需要确保你的所有类型都像这样注册到容器中(或使用其他自动注册方式):

kernel.Bind<IReportHelper>().To<ReportHelper>();
kernel.Bind<IExceptionHelper>().To<ExceptionHelper>();
kernel.Bind<IEmailHelper>().To<EmailHelper>();

然后你可以像这样构建一个 IReportHelper 实例:

IReportHelper report_helper = kernel.Get<IReportHelper>();

并且容器会自动管理布线。