LightInjectをしばらく使用していて、それは素晴らしいことでした!しかし、同じタイプの複数のコンストラクタをサポートしようとしているところに突っ込んでください。以下の簡単な例を参照してください。 Fooには4つのコンストラクタがあり、引数のタイプと数によって異なります。コンストラクタごとに1つのマッピングを登録します。 IFooを取得するためにGetInstanceを初めて呼び出すと、次の例外を除いて爆発します。私は何が欠けていますか?この機能をどのように達成できますか?LightInject複数のコンストラクタ
InvalidCastException:タイプ 'LightInject.ServiceContainer'のオブジェクトを 'System.Object []'にキャストできません。あなたがきれいにこれを達成するために型指定された工場を使用することができます
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)
あなたの 'Foo'クラスはDIコンテナで解決されるべきコンポーネントのようには見えません。代わりにエンティティまたはDTOのように見えます。そのようなオブジェクトは、DIコンテナによって解決されるべきではありません。なぜなら、それはあいまいさにつながるだけです。 – Steven