私は最初のMVCアプリを分離されたフレームワークに変換しようとしています。
次のレイヤーMVCWebレイヤー、コントローラーレイヤー、ドメインレイヤー、サービスレイヤー、データレイヤー、および共有プロジェクトがあります
構造マップを使用して、依存関係を注入して、問題なく動作するテストを実行しました。私の主なハードルはこれです。
Oracleデータベースで作業しているので、実行時にEntityFrameworkに含まれているスキーマを再マップする必要があります。BrandonHayesアダプターを使用してこれを機能させています(少し変更しました)。
サービスレイヤーのテストでは、オブジェクトコンテキストをモックするため、実際のデータベースに対して実行されません。
private Mock<ICLObjectContext> _clmock = new Mock<ICLObjectContext>();
データ単体テストでは、このようなことを行うので、テストデータベースに対してテストでき、トランザクションを使用して、テスト後にロールバックできます。
//This allows us to remap the schema
Dictionary<string,string> mappingschemas = new Dictionary<string,string>();
mappingschemas.Add("CLAPORTAL","CLAPORTALTEST");
mappingschemas.Add("QCTL","QTEST");
_context = new CLObjectContext(ec, mappingschemas);
ObjectFactory.Inject(typeof(ICLObjectContext), _context);
これはうまく機能します。問題は、アプリケーションを実際に実行しようとしたときです。
このコンストラクターを削除し、Structuremapが実行時にオブジェクトコンテキストを作成できるように、単純な0パラメーターコンストラクターのみを残して、スキーママッピングを実行できないようにする必要がありました。
Webプロジェクトにはデータレイヤーへの参照がなく、ICLObjectContextについて何も知らないため、構成を介して構造マップにどのように伝えるか、スキーマxをスキーマyにマッピングする新しいディクショナリを作成します。
サービスレイヤーにはデータレイヤーへの参照があるので、Webプロジェクトはサービスレイヤーを参照できるので、そこで行う必要があると思います。
これは正しいでしょうか?ええ、私はちょうど自分自身が追いついたばかりで、逃げ道を見ることができません。
ありがとう