在 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();
}
}
我正在我的控制器中注入依赖项,如下所示:
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();
}
}