2010-11-07 6 views
3

Je travaille actuellement sur un projet qui utilise le conteneur AutoFac Inversion of Control. Je tente de convertir un exemple de code à partir de C# dans une base de code d'un projet existant qui est écrit en VB.NET et j'ai rencontré un problème.Problème de conversion C# à VB.NET très spécifique

La ligne originale de code est:

EventHub.Subscribe<HandshakingEvent>(container.Resolve<HandshakeAuthenticator>().CheckHandshake); 

Ce que j'ai converti en:

EventHub.Subscribe(Of HandshakingEvent)(Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake) 

Mais - cela crée une erreur, « Argument non spécifié pour le paramètre 'ev' de CheckHandshake ".

Le type de paramètre pour la EventHub.Subscribe (de HandshakingEvent) Procédure est System.Action (de HandshakingEvent)

je peux voir ce que le problème est, je ne suis pas vraiment sûr que faire à ce sujet! J'ai essayé d'utiliser 'AddressOf', mais cela ne semble pas fonctionner non plus.

Merci à l'avance ... - Chris

+0

Qu'est-ce que 'CheckHandshake'? – SLaks

Répondre

5

Essayez

EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake) 

(en utilisant le mot-clé AddressOf pour obtenir un délégué)

+0

Merci - Vous êtes sur. J'avais essayé 'AddressOf', mais cela ne fonctionnait toujours pas. Il s'avère que c'était pour une raison différente, cependant! J'avais déclaré le paramètre de CheckHandshake comme ByRef, pas ByVal! –

3

Le code VB tente d'appeler la méthode au lieu de créer un délégué pour cela. Utilisez l'opérateur AddresOf pour obtenir un deletegate:

EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake) 

Le mot-clé n'est pas nécessaire en C#, comme entre parenthèses sont toujours utilisés lorsque vous appelez une méthode, mais en VB vous pouvez appeler une méthode sans parenthèses aussi.

+0

Merci - Vous êtes sur. J'avais essayé 'AddressOf', mais cela ne fonctionnait toujours pas. Il s'avère que c'était pour une raison différente, cependant! J'avais déclaré le paramètre de CheckHandshake comme ByRef, pas ByVal! –