2017-08-03 5 views
0

Webプロジェクト(コントローラ/ビュー/スクリプト)、サービスプロジェクト(ビジネスレイヤー、ビューモデルを構築する)、リポジトリプロジェクト(データアクセスレイヤー)を持つMVCソリューションを構築しています。複数のプロジェクトでAutoMapを設定する

私は過去に私のプロジェクトでAutoMapperを使用しているし、この溶液中AutoMapperを設定しようとしています。通常、私はGlobal.asax.csで呼び出されMapperConfig.csの私のすべてのマップを設定します。

私の問題は、私が通常AutoMapperを構成するウェブプロジェクトは、サービスプロジェクトへの参照しか持たず、サービスプロジェクトはデータプロジェクトへの参照しか持たないということです。だから、いつものようにマップを設定すると、データプロジェクトの参照がないWebプロジェクトのために、データプロジェクトのマップを定義できません。データプロジェクトの参照をWebプロジェクトに追加せずにデータアクセスレイヤーマップを構成する方法が必要です。

プロジェクトの依存関係図は、以下のようになります。

のWebメニュープロジェクト - >サービスメニュープロジェクト - >データメニュープロジェクト

どのように私はこれを克服することができますか?

+0

は、なぜあなたは、自動マッパーのための唯一の設定を持つようにしたいですか? すべてのレイヤにまたがるクラス/ dtosは本当にありますか? – ironstone13

+0

私はすべてのレイヤーにまたがるクラスはありません。私はプロジェクト単位でマップを定義する方法を見つけることができませんでした - それは私が克服しようとしているものです。 Ninjectを使って、私は 'NinjectModule'を継承した各プロジェクトでクラスを作成しました。 // stackoverflowの:HTTPSを参照してください - あなたはAutoMapper例を投稿することができた場合、私は喜んで – GregH

+0

どのように各プロジェクトにマップを初期化だろう静的コンストラクタを使用する方法についてを受け入れます。com/questions/30136415/where-to-place-automapper-maps-in-referenced-dll – ironstone13

答えて

1

単一のマッピング登録ファイルをすべてのプロジェクトにマッピングする必要はありません。特に、クロスカッティングタイプがないといっても過言ではありません。

最も簡単な方法は、プロジェクトごとに設定ファイルを定義し、それらの構成にお互いを電話を持って、あなたのアセンブリの層状の依存関係を繰り返し、以下のようにするために、次のようになります。また

Global.asax.cs --> WebProjMapRegistrations.Register()-->ServicesMapRegistrations.Register()-->DataMapRegistrations.Register() 

Assembly Scanning for auto configuration

@Jimmy Bogardの説明のように、Webアプリケーションを実行すると、すべてアプリケーションのアセンブリが最終的にアプリケーションドメインにロードされるため、すべてのアセンブリのすべてのプロファイルを取得してマッパーコンフィグレーションに追加することができます。How to Initialize AutoMapper Profiles in referenced project DLLs in ASP.Net webapp

さらに、 Where to place AutoMapper map registration in referenced dll

1

私がこれをいくつかのASP.Net MVCプロジェクトで処理した方法は、AutoMapper Profilesを使用しています。

あなたはそのプロジェクト/アセンブリ内のオブジェクトのマッピングを作成扱う別のマッピングプロファイルを作成します。

あなたは、手動で全体の構成にプロファイルを追加したり、自動的にプロファイルをロードするためにReflection/Assembly scanningを使用することができます。

関連する問題