Search code examples
c#asp.net-mvcasp.net-mvc-5ninject

Injecting dependencies in ASP.NET MVC 5 Startup class


I am injecting dependencies in my controller as follows:

private IEmailSender _emailSender;

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

Then resolving the dependencies using Ninject as follows:

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

So far everything is working fine. But I need to use this IEmailSender service in Startup class.

What I have tried so far is:

public partial class Startup
{
    private IEmailSender _emailSender;

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

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

       _emailSender.SendEmail();
    }
}

But this does not work as application does not start because Startup class does not have parameter less constructor.

Any idea how I can use IEmailSender in Startup class?


Solution

  • Ninject assigns itself as the current DependencyResolver instance, so you can use its .GetService() method to inject the concrete instance

    public partial class Startup
    {
        private IEmailSender _emailSender;
        public Startup()
        {
            _emailSender = DependencyResolver.Current.GetService<IEmailSender>();
        }
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
           _emailSender.SendEmail();
        }
    }