代码之家  ›  专栏  ›  技术社区  ›  Kyle West

如何将C#StructureMap初始化转换为VB.NET?

  •  4
  • Kyle West  · 技术社区  · 17 年前

    我正要把头伸进这扇滑动玻璃门。我不知道如何在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 回复  |  直到 17 年前
        1
  •  9
  •   Konrad Rudolph    17 年前

    目前,这根本不可能。当前版本的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)
    
        2
  •  2
  •   Doug Ferguson    17 年前
        3
  •  1
  •   Pete OHanlon    17 年前

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

        4
  •  0
  •   Kyle West    17 年前

    这太棒了,不管出于什么原因,它都不能编译。啊。

    不过,以下是它的想法:

    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