无法通过AutoFac或Ninject

时间:2019-07-02 16:25:34

标签: vb.net dependency-injection ninject autofac

我一直想在自己的应用程序上使用这些不错的依赖项注入框架,但是当依赖项的参数在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.

0 个答案:

没有答案