簡體   English   中英

使用Ninject進行多依賴注入

[英]Multiple Dependency Injection using Ninject

我正在嘗試使用Ninject進行多重依賴注入。 我有3個類, EmailHelperExceptionHelperReportHelper ExceptionHelper類需要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>();

容器將自動管理接線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM