在 ASP.NET MVC 5 Startup class 中注入依赖项

Injecting dependencies in ASP.NET MVC 5 Startup class

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

private IEmailSender _emailSender;

public HomeController(IEmailSender emailSender)
{
     _emailSender = emailSender;
}

然后使用 Ninject 解决依赖关系,如下所示:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind(typeof(IEmailSender)).To(typeof(EmailSender));   
}

到目前为止一切正常。但是我需要在 Startup class.

中使用这个 IEmailSender 服务

目前我尝试过的是:

public partial class Startup
{
    private IEmailSender _emailSender;

    public Startup(IEmailSender emailSender)
    {
        _emailSender = emailSender;
    }

    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);

       _emailSender.SendEmail();
    }
}

但这不起作用,因为应用程序无法启动,因为 Startup class 没有无参数构造函数。

知道如何在 Startup class 中使用 IEmailSender 吗?

您可以在 Program.cs 主函数中创建内核。所以所有的对象和服务都在调用 Startup.cs 之前注册。这样 ninject 就能在启动时解析 IEmailSender class.

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