我在控制器中注入依赖项,如下所示:
private IEmailSender _emailSender;
public HomeController(IEmailSender emailSender)
{
_emailSender = emailSender;
}
然后使用Ninject
来解决依赖关系,如下所示:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(typeof(IEmailSender)).To(typeof(EmailSender));
}
到目前为止,一切正常。但是我需要在IEmailSender
类中使用此Startup
服务。
到目前为止,我尝试过的是:
public partial class Startup
{
private IEmailSender _emailSender;
public Startup(IEmailSender emailSender)
{
_emailSender = emailSender;
}
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_emailSender.SendEmail();
}
}
但这不能正常工作,因为Startup
类的参数没有构造函数少。
有什么想法可以在Startup类中使用IEmailSender
吗?
答案 0 :(得分:2)
Ninject将自身分配为当前的DependencyResolver
实例,因此您可以使用其.GetService()
方法来注入具体实例
public partial class Startup
{
private IEmailSender _emailSender;
public Startup()
{
_emailSender = DependencyResolver.Current.GetService<IEmailSender>();
}
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_emailSender.SendEmail();
}
}
答案 1 :(得分:0)
您可以在Program.cs
主函数中创建内核。因此,所有对象和服务都在调用Startup.cs
之前注册。这样, ninject 将能够在启动类中解析IEmailSender
。