В моем приложении ASP.NET MVC все контроллеры используют этот объект ApplicationDbContext. В настоящий момент он создается внутри контроллера контроллера, но это жесткая связь и не является хорошей практикой.Как передать ApplicationDbContext в конструктор MVC5 ASP.NET?
public MessagesController()
{
this.Db = new ApplicationDbContext();
this.Mapper = new MessageMapper(Db);
this.Service = new MessageService();
}
В идеале я хочу это ApplicationDbContext быть передан в качестве параметра в конструктор каждого контроллера, как этот сценарий с инъекцией зависимостей:
public MessagesController(ApplicationDbContext context){
this.Db = context;
this.Mapper = new MessageMapper(Db);
this.Service = new MessageService();
}
Вопрос заключается в том, как достичь этого? Я попытался найти исходный код, который контролирует инъекцию зависимостей контроллера, но он поставляется как файл .NET dll, и я не могу изменить (так же, как вы не можете редактировать файлы пространства имен System). Итак, как возможна инъекция зависимости для контроллеров в ASP.NET MVC? Может ли кто-нибудь использовать мой сценарий в качестве примера? Благодарю.
Есть много рамок IoC с MVC адаптерами. См. Http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection для Unity – haim770
На самом деле вы также хотите передать Сервис как зависимость. Если Mapper на самом деле является репозиторием, тогда он должен быть введен вместо ApplicationDbContext, который является детальностью _sistence.Btw, правильно используя DI, вы вводите в конструктор только сервисы (репозиторий - это тоже сервис), а не все зависимости, необходимые для выполнения самих действий. – MikeSW
Спасибо за ваш совет. Также мне было интересно, если я хочу добавить что-то вроде Controller.Server в класс под названием ImageUploadService, как я могу это сделать? Проблема в том, что Controller.Server недоступен внутри конструктора контроллера, но доступен только в действиях контроллера. Я хочу, чтобы Controller.Server передавался как зависимость, всегда является тем же самым экземпляром. –