2011-08-21 5 views
5

私は契約で取る必要のあるもの(インターフェイスとして指定)に取り組んでいます。このインターフェイスを満たす正式に定義された具体的なクラスなしで、その場でインスタンスを作成します。実行時にインタフェースから具体的な型を生成するためのオープンソースライブラリ?

構文の例は、このようなものです:私は他の.NETライブラリやフレームワークは、このような振る舞いを(NServiceBusが頭に浮かぶ)を提供見てきました

IExampleMessage message = MessageBuilder.Create<IExampleMessage>(x => { 
    x.PropertyA = "Test"; 
    x.PropertyB = 5; 
}); 

、および存在する場合、私は思ったんだけどランタイムコードを抽象化した第三者のライブラリ。私はCastle DynamicProxyを見る場所だと思っていましたが、これはプロキシとインターセプトに完全に焦点を当てているようで、コード生成の面を明らかにしていないようです。

Reflection.Emitを使用してその場でクラスを作成する実装を書くことができますが、ソリッドなオープンソースライブラリがあればそれを使用したいと思います。

提案がありますか?

+0

私は興味があります:メソッドとのインターフェイスはどのようにサポートされるのですか?どのようにその構文を持つメソッドのカスタム実装を指定するつもりですか? –

+0

メソッドとのインターフェイスがサポートされていません –

+0

BLTookitで同様のコードが見られました – adontz

答えて

1

mockingライブラリ - NMockとRhinoMockについてはどうですか?

あなたにもスタブ/期待を用いたコンクリートの型に実装を追加することができます。特に

Rhinoはあなたが望むものの種類の素敵なラムダベースの構文を持っています。

これはあなたのニーズを満たしていませんか?

これは何か?

IExampleMessage message = MockRepository.GenerateStub<IExampleMessage>(); 
message .Stub(x => x.PropertyA).Return("Text")  
message .Stub(x => x.PropertyB).Return(5) 
2

即興インターフェースは何が必要です: - http://code.google.com/p/impromptu-interface/

私はpolymorphic types in .NETを作成するためにそれを使用しました。

またClayで見ることができます。

+0

私はDynamicから離れようとしていました。しかし、そのものはかなりクールです。 –

+1

@ Jonathan-Hollandは、あなたが記述しているユースケースでは、即興を使用しているときにコード内で動的な使用法を実際に見る必要はありません(実際は舞台裏で起こります)。実装例: 'public T Create (アクション init)ここで、T:class {var message = new ExpandoObject()。ActLike (); init(メッセージ);返信メッセージ;} ' – jbtule

関連する問題