Domanda

che sto per mettere la testa attraverso questo porta scorrevole in vetro. Io non riesco a capire come eseguire il seguente codice in VB.NET per salvare la mia vita.

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();
                                                    });
                                     });
    }
È stato utile?

Soluzione

Al momento, non è semplicemente possibile. La versione corrente di VB non supporta più righe (o dichiarazione) lambda. Ogni lambda può comprendere solo una singola espressione. La prossima versione di VB correzione (semplicemente non c'era abbastanza tempo nell'ultima release).

Nel frattempo, si dovrà accontentare di un delegato:

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)

Altri suggerimenti

Il mio VB.NET non è fino a zero, quindi non si può aiutare con il codice direttamente. Quello che posso dire, però, è come farlo da soli ed è una cosa ancora più bizzarra. In sostanza, è necessario utilizzare Reflector di leggere il file eseguibile che contiene questo codice in - e poi si può scegliere di uscita come VB.NET -. che bello, e questo trucco funziona in entrambe le direzioni

E 'fantastico, per qualsiasi motivo, però, non viene compilato. Ugh.

Ecco cosa ne è venuto su con se:

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

E ho provato ad aggiungere il _ per renderlo una linea (che non funziona nemmeno)

 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

Chiunque altro odiano le loro applicazioni legacy? : P

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top