Мне трудно разобраться с тем, что кажется очевидной проблемой / ограничением шаблона, когда дело доходит до типичного внедрения зависимостей в конструктор. Например, допустим, у меня есть контроллер ASP.NET MVC3, который выглядит следующим образом:
Public Class MyController
Inherits Controller
Private ReadOnly mServiceA As IServiceA
Private ReadOnly mServiceB As IServiceB
Private ReadOnly mServiceC As IServiceC
Public Sub New(serviceA As IServiceA, serviceB As IServiceB, serviceC As IServiceC)
Me.mServiceA = serviceA
Me.mServiceB = serviceB
Me.mServiceC = serviceC
End Sub
Public Function ActionA() As ActionResult
' Do something with Me.mServiceA and Me.mServiceB
End Function
Public Function ActionB() As ActionResult
' Do something with Me.mServiceB and Me.mServiceC
End Function
End Class
Мне трудно преодолеть тот факт, что контейнеру DI было предложено создать все три зависимости , когда в любой момент времени может потребоваться только подмножество зависимостей. методы действия на этом контроллере.
Кажется, предполагается, что конструкция объекта является грязной и нет побочных эффектов от конструкции объекта ИЛИ все зависимости последовательно используются . Что, если конструкция объекта не была дешевой или были побочные эффекты? Например, если построение IServiceA
связано с открытием соединения или выделением других значительных ресурсов, то при вызове ActionB
это будет напрасно потрачено время / ресурсы.
Если в этих методах действия используется шаблон местоположения службы (или другой аналогичный шаблон), то никогда не будет возможности излишне создать экземпляр объекта, который останется неиспользованным, конечно, к этому шаблону добавлены другие проблемы, делающие его непривлекательным.
Использует ли канонический шаблон инъекция конструкторов + интерфейсы шаблона DI, в основном, замкнул разработчика на «ограничение» того, что реализации зависимости должны быть дешевыми, чтобы реализовать их, или экземпляр должен быть значительно использован? Я знаю, что у всех моделей есть свои плюсы и минусы, это только один из минусов ДИ? Я никогда не видел, чтобы это упоминалось ранее, что мне кажется любопытным.