2009-08-14 12 views
2

NHibernateを使うとき、あなたはあなたのentitesを仮想メソッドで定義し、NHibernateはあなたのオブジェクトの変更を追跡するプロキシオブジェクトを作成します。MoqとNHibernateは自動的に派生型を作成しますか?

Moqでは、フレームワークは派生型をインターフェイスまたは基本クラスから魔法のように作成します。例えば

var mock = new Mock<IFoo>(); 
IFoo magicFoo = mock.Object; 

これは本当にクールです。これらのフレームワークはどのように機能しますか?彼らは反射、ジェネリック、ある種の動的コンパイル、または何か他のものを使用していますか?

これらは両方ともオープンソースプロジェクトであることを認識しています。コードを掘り下げることもできますが、ここで簡潔な回答をしたいと思います。

答えて

3

MoqはCastle Dynamic Proxyを使用していますが、Proxyオブジェクトを作成できる他の多くのフレームワークもあります。 NHibernateは2.1のとおり、それはまた、次のいずれかを使用することができます:

これらのプロジェクトのそれぞれは、彼らがこれを達成する方法の簡単な、について説明がありますうまくいけば、あなたが探している答えのようなものです。

1

城のDynamicProxy2クラス。

2

リフレクション(生成する必要があるものを特定)とリフレクションエミット(動的に派生クラスを生成し、メソッドに対してILを生成する)の組み合わせを使用します。 .NETでは、これらのAPI(リフレクションとリフレクションエミット)の両方を提供しています。

+1

ベータ版を使用しても構わない場合は、実際に.NET Framework 4を使用すると、実行時にコンパイラを呼び出すことができますので、ilasmなどに頼らずにC#コードから生成できます。 –

関連する問題