/私は、動的にクラスにイベントを追加するモックフレームワークを使用する必要がありますすることはできますか?
質問
次のインタフェースを考えてみます:
public interface IMyCallback
{
void SomeEvent(int someArg);
}
WCFサービスから「イベント」を受信されるWCFコールバックの契約です。このインタフェースのための私の実装では、このようになります。
public class MyCallback : IMyCallback
{
void IMyCallback.SomeEvent(int someArg)
{
OnSomeEvent(someArg);
}
protected virtual void OnSomeEvent(int someArg)
{
EventHandler<SomeEventArgs> handler = this.SomeEvent;
if (handler != null)
{
handler(this, new SomeEventArgs(someArg));
}
}
public event EventHandler<SomeEventArgs> SomeEvent;
}
私は、コールバックをインスタンス化し、私のクライアントコードでSomeEventイベントをフックすることを可能にします。サーバーが私のコールバックを呼び出すたびに、私はそれ昔ながらの.NETイベントを受け取ります。すべてが素晴らしい作品ます。
私はすべての私のプロジェクトで、任意のインターフェイスと私は簡単に再利用このアプローチこのコールバックの作成を自動化するファクトリクラスを記述したいと思います:ここで質問が来ます。工場はこのように呼ばれます。
var myCallback = CallbackFactory.CreateCallback<IMyCallback>();
/私は動的にこのクラスを作成するために、モックフレームワークを使用する必要がありますすることができ、または私は弾丸をかむとILに直接放出する必要がありますか?または私はちょうど手のコードごとに実装する必要がありますか?それとも私は考えていないよ別のアプローチがあるのでしょうか?
解決
あなたは順番にあなたが必要なすべてのインフラストラクチャを与えるべき城プロジェクトのDynamicProxy を使用することができますプロキシを生成します。そして、あなたが適切に行われていない場合は厄介な副作用を持つことができたILを発する心配する必要はありません。
私はあなたのIMyCallbackと呼ばれる唯一のことで実際のイベントを持っていないという理由だけで、あなたはプロキシを使用している場合、ユーザーコード内のイベントに添付する方法がわかりません。または私はあなたの質問を誤解したのですか?
他のヒント
私はモックフレームワークを使用すると罰金だと思います。本質的には、モック/スタブフレームワークを簡単に既知の入力のための型定義のための実装を提供する方法以外の何ものでもありません。
それはあなたがここでやっているまさにだので、私はそれで行くと言っています。