実行時にクラスにインターフェース実装を追加する方法を探しています。これがサンプルコードです。これについては以下で説明します。
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
これは、エンドポイントに必要なすべてのインターフェイスを実装する単一のクラスをCreateHostに提供する必要があるWCFに関連しています。このシナリオでは、ActionDispatcherはそのようなクラスであり、IActionは実装される多くのインターフェースの1つです。
私のビジョンは、ActionDispatcherでIActionを手動で実装することを避けることですが、何らかの登録メカニズムがあり、ActionDispatcherはインターフェイスIAction、IDoing、INoActionなどを実装する必要があり、ディスパッチメソッドを生成する必要があります。
MSDNによると、どのクラスもどのインターフェイスとも互換性があるため、ActionDispatcherで「Implements」を宣言する必要はありません。ただし、インターフェイスを実装し、実装メソッドをインターフェイス定義に接続する必要があるため、WCFは必要なときにそれを見つけることができます。
私が見つけた最も近いものはおそらく自動インターフェース実装者ですが、(1)新しいタイプを作成し、(2)ダミーメソッドを追加します。
また、CodeCompileUnitクラスを理解しようとしましたが、これまでのところ、必要なものとの関係を確認できませんでした。
Reflection APIの経験が豊富な人が私を助けてくれますか?私がやりたいことをする良い方法はありますか?