Question

Je suis sur le point de mettre ma tête à travers cette porte coulissante en verre. Je ne peux pas comprendre comment exécuter le code suivant dans VB.NET pour sauver ma vie.

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();
                                                    });
                                     });
    }
Était-ce utile?

La solution

À l'heure actuelle, il est tout simplement impossible. La version actuelle de Visual Basic ne prend pas en charge multiligne (ou déclaration) lambdas. Chaque lambda ne peut comprendre une seule expression. La prochaine version de VB corrigera que (il était tout simplement pas assez de temps dans la dernière version).

En attendant, vous devrez faire avec un délégué:

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)

Autres conseils

Mon VB.NET est pas à la hauteur, donc je ne peux pas vous aider avec le code directement. Ce que je peux vous dire, cependant, est de savoir comment faire vous-même et il est un doozy. En gros, vous devez utiliser réflecteur pour lire le fichier exécutable qui contient ce code - et vous pouvez choisir de sortie comme VB.NET -. C'est vraiment cool, et cette astuce fonctionne dans les deux sens

C'est génial, pour une raison quelconque cependant, il ne compile pas. Ugh.

Voici ce qu'il est venu avec cependant:

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

Et je l'ai essayé d'ajouter _ pour en faire une ligne (qui ne fonctionne pas non plus)

 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

Tout le monde déteste les autres leurs applications existantes? : P

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top