[英]Multiple Dependency Injection using Ninject
我正在嘗試使用Ninject進行多重依賴注入。 我有3個類, EmailHelper
, ExceptionHelper
和ReportHelper
。 ExceptionHelper
類需要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);
ExceptionHelper
和IEmailHelper
似乎松散耦合,但是ReportHelper
和ExceptionHelper
仍然緊密耦合。
如何使ReportHelper
和ExceptionHelper
松散耦合?
我可以這樣修改我的代碼嗎?
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.