我目前正在开发一个使用AutoFac Inversion of Control容器的项目。
我正在尝试将一些示例代码从C#转换为我现有项目的代码库,该代码库是用VB.NET编写的,我遇到了问题。
原始代码行是:
EventHub.Subscribe<HandshakingEvent>(container.Resolve<HandshakeAuthenticator>().CheckHandshake);
我已转换为:
EventHub.Subscribe(Of HandshakingEvent)(Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)
但是 - 这会导致错误,“没有为CheckHandshake的参数'ev'指定参数”。
EventHub.Subscribe(Of HandshakingEvent)程序的参数类型是 System.Action(HandshakingEvent)
我可以看到问题所在,我只是不确定该怎么做!我尝试过使用'AddressOf',但这似乎也不起作用。
提前致谢... - 克里斯
答案 0 :(得分:5)
尝试
EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)
(使用AddressOf
关键字获取代理人)
答案 1 :(得分:3)
VB代码试图调用该方法而不是为它创建委托。使用AddresOf
运算符获取deletegate:
EventHub.Subscribe(Of HandshakingEvent)(AddressOf Container.Resolve(Of HandshakeAuthenticator)().CheckHandshake)
C#中不需要关键字,因为在调用方法时总是使用括号,但在VB中,您也可以调用不带括号的方法。