使用Ninject的多重依赖项注入

本文关键字:依赖 注入 Ninject 使用 | 更新日期: 2023-09-27 18:20:10

我正在尝试使用Ninject进行多依赖项注入。我有三个班,EmailHelperExceptionHelperReportHelperExceptionHelper类需要EmailHelper,而ReportHelper需要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构造函数。Rest构造函数具有相同的结构。

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

使用Ninject的多重依赖项注入

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

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>();

容器将自动管理接线。