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 は、複数行 (またはステートメント) ラムダをサポートしていません。各ラムダは、1 つの式のみで構成できます。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

そして、_を追加して1行にしようとしました(それも機能しませんでした)

 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 に答える