Ограничивает ли шаблон DI создание дорогостоящих объектов в сочетании с нечастым использованием зависимостей?

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

8
задан ckittel 24 August 2011 в 14:40
поделиться