我正在寻找一种在运行时向类添加接口实现的方法。这是一个示例代码,我将在下面讨论。
Public Interface IAction
Sub DoThis(a As Integer)
End Interface
Class Actor
Implements IAction
Private mNumber As Integer
Public Sub New(number As Integer)
mNumber = number
End Sub
Public Sub DoThis(a As Integer) Implements IAction.DoThis
Console.WriteLine(String.Format("Actor #{0}: {1}", mNumber, a))
End Sub
End Class
Class ActionDispatcher
Implements IAction
Private Shared mActionList As New List(Of IAction)
Public Shared Sub Add(actor As IAction)
mActionList.Add(actor)
End Sub
Public Sub DoThis(a As Integer) Implements IAction.DoThis
For Each act In mActionList
act.DoThis(a)
Next
End Sub
End Class
Module Module1
Sub Main()
Dim a As New ActionDispatcher
ActionDispatcher.Add(New Actor(1))
ActionDispatcher.Add(New Actor(2))
a.DoThis(5)
End Sub
End Module
这与 WCF 相关,需要向 CreateHost 提供单个类,该类实现端点所需的所有接口。在这个场景中,ActionDispatcher 就是这样一个类,而 IAction 就是众多要实现的接口之一。
我的愿景是避免在 ActionDispatcher 中手动实现 IAction,但有某种注册机制,我可以说,ActionDispatcher 必须实现接口 IAction、IDoing、INoAction 等 - 并为我生成调度方法。
MSDN 说,任何类都兼容任何接口,所以我不需要在 ActionDispatcher 中声明“Implements”。但是我仍然需要实现接口,并将实现方法连接到接口定义上,以便 WCF 可以在需要时找到它。
我发现的最接近的可能是Automatic Interface Implementer,但它 (1) 创建了一个新类型,(2) 添加了虚拟方法。
我也试图理解 CodeCompileUnit 类,但到目前为止还看不到与我需要的关系。
在反射 API 方面更有经验的人可以帮助我吗?有什么好方法可以做我想做的事吗?