0

EntityFrameworkで動作するようにプロジェクトを設定しました。これはデータベースファーストのアプローチです。

IoCの場合、Castle Windsorを使用しており、プロジェクトはすべての依存関係を注入するように設定されています。私の質問は、私のEFエンティティに対して同じことを行うためにCastleを設定する必要があるかどうかです。どうやってやるの?

4

1 に答える 1

0

Castle で Entity Framework を使用するには、いくつかの方法があります。Unit of WorkパターンとRepositoryパターンの両方を採用することをお勧めします。DbContext は作業単位のほとんどの機能を提供し、DbSet は同様にリポジトリに必要なもののほとんどを提供します。

遭遇する主な問題は、EF がモデル オブジェクトの依存関係の挿入を理解していないことです。EF は、モデル オブジェクトを割り当てるときに常に空のコンストラクターを使用します。これは、モデル オブジェクトに依存関係の挿入を行う機会がないことを意味します。DbContext でオブジェクトの実体化フックを使用して、これを回避しました。

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += EFObjectLoadInitializer;

次に、EFObjectLoadInitializer はカーネルをモデル オブジェクトに挿入します (すべてのモデル オブジェクトが IInjectKernel インターフェイスをサポートしている必要があります)。インジェクション時に、カーネルは他の依存関係を解決するために使用されます。あまりきれいではありませんが、うまく機能し、Windsor でセットアップした残りのインフラストラクチャを活用できます。

于 2014-02-28T03:58:49.183 に答える