Seit einiger Zeit verwenden Sie LightInject und es war großartig! Versuchen Sie einen Fehler zu beheben, indem Sie versuchen, mehrere Konstruktoren desselben Typs zu unterstützen. Siehe das vereinfachte Beispiel unten. Foo hat vier Konstruktoren, die sich durch Art und Anzahl der Argumente unterscheiden. Ich registriere ein Mapping pro Konstruktor. Beim ersten Aufruf von GetInstance, um ein IFoo abzurufen, wird die folgende Ausnahme ausgelöst. Was vermisse ich? Wie kann ich diese Funktionalität erreichen?LightInject multiple Konstruktoren
InvalidCastException: Darf das Objekt des Typs 'LightInject.ServiceContainer' nicht in den Typ 'System.Object []' umgewandelt werden.
Public Interface IFoo
End Interface
Public Class Foo
Implements IFoo
Public Sub New()
End Sub
Public Sub New(name As String)
End Sub
Public Sub New(age As Integer)
End Sub
Public Sub New(name As String, age As Integer)
End Sub
End Class
container.Register(Of IFoo, Foo)
container.Register(Of String, IFoo)(Function(factory, name) New Foo(name))
container.Register(Of Integer, IFoo)(Function(factory, age) New Foo(age))
container.Register(Of String, Integer, IFoo)(Function(factory, name, age) New Foo(name, age))
Dim f1 As IFoo = container.GetInstance(Of IFoo)() 'BOOM!
Dim f2 As IFoo = container.GetInstance(Of String, IFoo)("Scott")
Dim f3 As IFoo = container.GetInstance(Of Integer, IFoo)(25)
Dim f4 As IFoo = container.GetInstance(Of String, Integer, IFoo)("Scott", 25)
Ihre 'Foo'-Klasse scheint nicht wie eine Komponente zu sein, die von Ihrem DI-Container gelöst werden sollte; es scheint stattdessen eine Entität oder ein DTO zu sein. Objekte wie diese sollten von Ihrem DI-Container nicht aufgelöst werden, da dies nur zu Mehrdeutigkeiten führen würde. – Steven