2011-07-03 9 views
2

私はコンテナクラスFoo<TInterface>を持っています。このクラスはコンストラクタで任意のインターフェイス型パラメータと文字列 "strCode"をとります。コンテナクラスのメソッドと汎用インターフェイスのメソッドを統合できますか?

strCodeはCSharpCodeProviderを介してコンパイルされ、Reflectionによって、適切な型が新しくコンパイルされたコード内に配置され、TInterface型にキャストされ、Foo内でプロパティTInterfaceバーに渡されます。

これは正常に動作し、クライアントはfoo.barに問題なくアクセスできます。しかし、Fooは(他のメソッドの中でも)Recompileという名前のメソッドを含んでいます。このメソッドは、基本的に前述の方法で新しいコード文字列を取り込み、コンパイルします。また、これは正常に動作しますが、それは、クライアントがメソッドのようなものに編成されているのFoo APIで終わることを意味します。私は、代わりに希望

foo.bar.MakeCoffee 
foo.bar.DoMagic 
foo.Recompile 

:つまり、

foo.MakeCoffee 
foo.DoMagic 
foo.Recompile 

をIジェネリックインターフェイスメソッドとFoo APIメソッドの両方にトップレベルのアクセス権を持つクラスインスタンスを返したいとします。

Foo<TInterface>のインスタンスを返すのが理想的ですが、私はC#のジェネリックスがこれを許可していないと理解しています。必要であればコードを投稿するのはうれしいですが、まずC#の静的型の性質のために間違ったツリーを作り上げていないことを確認したいと思います。

+1

C#のどのバージョンですか? C#4の新しい動的言語サポートを使用してこの作業を行うことができます。 –

+0

私の経験から、このバージョンのCSharpCodeProviderが4.0よりも約15%速くコンパイルされているため、できるだけC#3.5を使用することをお勧めします。しかし、あまり複雑でないならば、私はダイナミックなソリューションについて尋ねたいと思うでしょう。私はどこを見なければならないのか、一般的なアプローチを取るべきかについてのアドバイスはありますか? –

+0

ここにいくつかの例があります:http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with-dynamicobject.aspx –

答えて

1

Castle Dynamic Proxylinfuのようなプロキシライブラリを使用する必要があると思います。

達成しようとしている目標は何ですか?あなたはAOPをしたいですか?

関連する問題