在ASP.NET MVC 5启动类中注入依赖项

时间:2018-10-06 02:35:24

标签: c# asp.net-mvc asp.net-mvc-5 ninject

我在控制器中注入依赖项,如下所示:

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吗?

2 个答案:

答案 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