実行時にクラスにインターフェイス実装を追加する方法を探しています。 サンプルコードは次のとおりです。クラスにインターフェイスをプログラムで(実行時に)追加する方法
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
これは、1つのエンドポイントのために必要なすべてのインタフェースを実装する単一のクラスを、CreateHostするために提供する必要がWCF、に関連しています。このシナリオでは、ActionDispatcherはそのようなクラスであり、IActionは実装する多くのインターフェイスの1つです。
私はActionDispatcherを手動で実装することを避けたいと思いますが、ActionDispatcherがIAction、IDoing、INoActionなどのインターフェイスを実装し、ディスパッチメソッドを生成する必要がある登録メカニズムがあります。
MSDNによると、どのクラスもどのインターフェイスとも互換性があるため、ActionDispatcherで "Implements"を宣言する必要はありません。しかし、私はまだインターフェイスを実装して実装メソッドをインターフェイス定義に接続する必要があるので、WCFは必要なときにそれを見つけることができます。
私が見つけた最も近いものはおそらくAutomatic Interface Implementerですが、(1)は新しいタイプを作成し、(2)はダミーメソッドを追加します。
私はCodeCompileUnitクラスについても理解しようとしましたが、これまでのところ私が必要とするものとの関係を見ることができませんでした。
Reflection APIでもっと経験豊かな人が助けてくれますか?私が望んでいるwhayをする良い方法はありますか?
私はこの練習の途中です。おそらく、私が今思うほとんどのものはIL(アセンブラほど自明ではありませんが、エラーが発生しやすい)ですが、文字列からILコードを生成することです:
Compiler.CompileToIL("Public Sub DoThat(a As Integer) Implements ... End Sub")
– MikNik