0

私は最初の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プロジェクトはサービスレイヤーを参照できるので、そこで行う必要があると思います。

これは正しいでしょうか?ええ、私はちょうど自分自身が追いついたばかりで、逃げ道を見ることができません。

ありがとう

4

1 に答える 1

0

さて、もう一度、質問を書いた後、それは私が解決策を思いつくのを助けました。

ISchemaResolverというインターフェイスを作成し、それを共有プロジェクトの一部にしました。

次に、これをentityadapterクラスのコンストラクターに配置しました。

Webプロジェクトで、AppSettingsSchemaResolverというクラスを作成しました。このクラスは、アプリの設定を使用して辞書を設定し、依存関係を接続するときに、global.asaxを介してそれを渡します。

              //Now also set up our schema mapping stuff.
  ObjectFactory.Configure(x => x.For<ISchemaResolver>().Add<AppSettingsSchemaResolver>());
于 2012-07-19T08:30:03.173 に答える