У меня есть приложение ASP.NET MVC 3, которое использует расширение Ninject.MVC3 для настройки DI в моем приложении MVC. А именно, есть файл NinjectMVC3.cs
в папке App_Start
, где определены мои привязки. Это хорошо работает для DI в контроллерах моего приложения.
В дополнение к веб-приложению ASP.NET MVC мое решение также содержит проекты библиотеки классов, назовем ее MyProject.Core
, в которой есть модель моего домена, сервисы и т. Д. Там у меня есть класс с именем UserServices
, который использует сервис с именем EmailServices
, например:
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = new EmailServices();
public void CreateUser(...)
{
// Create user...
_emailServices.SendWelcomeEmail(newUser);
}
}
Как вы можете видеть, класс UserServices
имеет жестко запрограммированную зависимость от EmailServices
, но я бы хотел, чтобы он также был настроен на использование DI. А именно, в моем приложении ASP.NET MVC (или в проекте модульного тестирования, или где бы то ни было) я хочу иметь возможность сказать «Bind IEmailServices
для использования TestEmailServices
» и иметь класс UserServices
, использующий TestEmailServices
вместо EmailServices
.
Как мне это сделать? Я хотел бы иметь возможность сделать что-то вроде:
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = kernel.Get<EmailServices>();
...
}
Но я не уверен, откуда взяться kernel
, в этом случае. Имеет ли смысл то, что я спрашиваю, или я лаю не на том дереве?
Спасибо