2010-11-07 21 views
3

我目前正在使用AutoFac Inversion of Control容器的項目。非常具體的C#VB.NET轉換問題

我正在嘗試將C#中的一些示例代碼轉換爲我在VB.NET中編寫的現有項目的代碼庫,並且遇到了問題。

代碼的原始行是:

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

我已經轉換爲:

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

但是 - 這是造成錯誤,「爲CheckHandshake的參數 'EV' 未指定的參數」。

EventHub.Subscribe(中HandshakingEvent)過程中的參數類型爲

(的HandshakingEvent)System.Action我可以看到的問題是什麼,我只是真的不知道該怎麼辦呢!我嘗試過使用'AddressOf',但這似乎並不奏效。

在此先感謝... 克里斯 -

+0

什麼是CheckHandshake? – SLaks 2010-11-07 23:48:53

回答

5

嘗試

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

(使用AddressOf關鍵字,以得到代表)

+0

謝謝 - 你真的很棒。我嘗試過「AddressOf」,但它仍然無法工作。事實證明,這是出於不同的原因,但!我已經將CheckHandshake的參數聲明爲ByRef,而不是ByVal! – 2010-11-07 23:56:50

3

VB代碼試圖調用該方法,而不是爲它創建一個委託。使用AddresOf運營商獲得deletegate:

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

不需要在C#中的關鍵字,如括號總是使用,當你調用一個方法,但在VB也可以調用一個方法不使用括號。

+0

謝謝 - 你真的很棒。我曾嘗試過'AddressOf',但它仍然無法工作。事實證明,這是出於不同的原因,但!我已經將CheckHandshake的參數聲明爲ByRef,而不是ByVal! – 2010-11-07 23:57:22