我一直想在自己的应用程序上使用这些不错的依赖项注入框架,但是当依赖项的参数在VB.NET中通过ByRef传递时,似乎都不能与构造函数注入一起使用。为什么会这样?
当Ninject试图以这种方式注入依赖项时引发奇怪的InvalidProgramException时,我首先发现了这一点。我在构造函数中删除了ByRef,异常消失了。然后,我认为这可能只是Ninject的问题。因此,我切换到AutoFac并遇到了相同的问题,但描述性更强。我意识到,显式传递ByRef实际上仅在传递值类型时才有意义,但是我将不得不修改很多类以删除ByRef关键字。有办法解决吗?谢谢。
Imports Autofac
Imports Ninject
Module Module1
Class Foo
End Class
Class Bar
Private _foo As Foo
Sub New(ByRef foo As Foo)
_foo = foo
End Sub
End Class
Enum Test
Ninject
AutoFac
End Enum
Sub Main()
For i = Test.Ninject To Test.AutoFac
Try
Select Case i
Case Test.Ninject
Dim kernel = New StandardKernel
kernel.Bind(Of Foo).ToSelf()
kernel.Bind(Of Bar).ToSelf()
kernel.Get(Of Bar)
Case Test.AutoFac
Dim builder = New ContainerBuilder
builder.RegisterType(Of Foo).AsSelf
builder.RegisterType(Of Bar).AsSelf
Dim container = builder.Build
container.Resolve(Of Bar)
End Select
Catch ex As Exception
Console.WriteLine($"{[Enum].GetName(GetType(Test), i)} Test - {ex.GetType.ToString}: {ex.Message}")
End Try
Next
Console.ReadLine()
End Sub
End Module
输出为...
Ninject Test - System.InvalidProgramException: Common Language Runtime detected an invalid program.
AutoFac Test - Autofac.Core.DependencyResolutionException: An exception was thrown while activating NijectDemo.Module1+Bar.