4

我正要把头伸进这扇滑动玻璃门。我不知道如何在 VB.NET 中执行以下代码来挽救我的生命。

private static void InitStructureMap()
    {
        ObjectFactory.Initialize(x =>
                                     {
                                         x.AddRegistry(new DataAccessRegistry());
                                         x.AddRegistry(new CoreRegistry());
                                         x.AddRegistry(new WebUIRegistry());

                                         x.Scan(scanner =>
                                                    {
                                                        scanner.Assembly("RPMWare.Core");
                                                        scanner.Assembly("RPMWare.Core.DataAccess");
                                                        scanner.WithDefaultConventions();
                                                    });
                                     });
    }
4

4 回答 4

9

目前,这根本不可能。当前版本的 VB 不支持多行(或语句)lambda。每个 lambda 只能包含一个表达式。下一版本的 VB 将解决这个问题(上一个版本根本没有足够的时间)。

与此同时,您将不得不与代表凑合:

Private Shared Sub Foobar(x As IInitializationExpression)
    x.AddRegistry(New DataAccessRegistry)
    x.AddRegistry(New CoreRegistry)
    x.AddRegistry(New WebUIRegistry)
    x.Scan(AddressOf Barfoo)
End Sub

Private Shared Sub Barfoo(ByVal scanner As IAssemblyScanner) 
    scanner.Assembly("RPMWare.Core")
    scanner.Assembly("RPMWare.Core.DataAccess")
    scanner.WithDefaultConventions
End Sub

' … '
ObjectFactory.Initialize(AddressOf Foobar)
于 2008-12-14T20:15:27.583 回答
2

您可以在以下位置看到另一种方法:

http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/structuremap-is-way-cool-even-in-vb-net

于 2009-05-13T22:44:05.893 回答
1

我的 VB.NET 没有达到标准,所以我无法直接帮助您编写代码。然而,我可以告诉你的是如何自己做,这很麻烦。基本上,您需要使用Reflector来读取包含此代码的可执行文件 - 然后您可以选择将其输出为 VB.NET - 这太酷了,而且这个技巧可以双向工作。

于 2008-12-14T19:28:13.747 回答
0

这太棒了,但无论出于何种原因,它都无法编译。啊。

这是它的想法:

Private Shared Sub InitStructureMap()
ObjectFactory.Initialize(Function (ByVal x As IInitializationExpression) 
    x.AddRegistry(New DataAccessRegistry)
    x.AddRegistry(New CoreRegistry)
    x.AddRegistry(New WebUIRegistry)
    x.Scan(Function (ByVal scanner As IAssemblyScanner) 
        scanner.Assembly("RPMWare.Core")
        scanner.Assembly("RPMWare.Core.DataAccess")
        scanner.WithDefaultConventions
    End Function)
End Function)
End Sub

我尝试添加 _ 使其成为一行(这也不起作用)

 Private Shared Sub InitStructureMap()
ObjectFactory.Initialize(Function (ByVal x As IInitializationExpression) _
    x.AddRegistry(New DataAccessRegistry) _
    x.AddRegistry(New CoreRegistry) _
    x.AddRegistry(New WebUIRegistry) _
    x.Scan(Function (ByVal scanner As IAssemblyScanner) _
    scanner.Assembly("RPMWare.Core") _
    scanner.Assembly("RPMWare.Core.DataAccess") _
    scanner.WithDefaultConventions() _
    End Function) _
End Function) 
End Sub

还有人讨厌他们的旧版应用程序吗?:P

于 2008-12-14T19:39:21.837 回答