Внедрение зависимостей в ASP.NET MVC 5 Startup class - PullRequest
0 голосов
/ 06 октября 2018

Я вставляю зависимости в мой контроллер следующим образом:

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

Но это не работает, так как приложение не запускается, потому что* У класса 1015 * нет конструктора без параметров.

Есть идеи, как использовать IEmailSender в классе запуска?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

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();
    }
}
0 голосов
/ 06 октября 2018

Вы можете создать ядро ​​в Program.cs основной функции.Таким образом, все объекты и услуги регистрируются до вызова Startup.cs.Таким образом, ninject сможет разрешить IEmailSender в классе запуска.

...