Мне трудно понять, что кажется очевидной проблемой / ограничением шаблона, когда дело доходит до типичного внедрения зависимостей конструктора. В качестве примера, допустим, у меня есть контроллер 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, в основном лимитирует разработчика своего рода «ограничением», которое реализации зависимости должны быть дешевым для создания экземпляра или экземпляр должен быть значительно использован? Я знаю, что у всех шаблонов есть свои плюсы и минусы, это только один из минусов DI? Я никогда раньше не видел, чтобы это упоминалось, и это мне кажется любопытным.