2017-01-31 25 views
1

問題はかなりシンプルですが、解決策が見えません。マルチプロジェクトソリューションで1つ以上のAutoMapperの設定

私のソリューションでは、私はDAL層(クラスライブラリ)、DTO層(クラスライブラリ)、MVCプロジェクトを持っています。

アイデアは、MVCアプリケーションがDTOレイヤーからアイテムを要求し、そのレイヤーがDALレイヤーからアイテムを取得するという考え方です。十分に簡単です。

DTOレイヤでは、私はそれらを管理するためのコンテキストを持つリポジトリを持っています。したがって、MVCアプリケーションはDTOコンテキストのインスタンスを作成し、適切なリポジトリからDTOエンティティを取得します。

問題が発生しました。

私はAutoMapperを使用して基になるエンティティをDTOにマップし、MVCアプリケーションではDTOをViewModelsにマッピングして戻すことを計画しました。

DTO層のコンテキストのコンストラクタでは、スタティックRegisterMappings()を呼び出して、基礎となるエンティティとDTOの間のマッピングを登録します。これまでのところ問題はありません。

しかしMVCアプリのGlobal.asaxに、私も(別のクラスからのDTO層の1に)RegisterMappings()を呼び出して、まだ私はMVCのアプリでDTOへのViewModelからマップしようとしたとき、私はMissing type map configuration or unsupported mapping例外を取得。

AssertConfigurationIsValid()によってスローされた例外を見ると、DTOとMVCアプリケーション層ではなく、DAL層とDTO層のマッピングが期待通りに見えていることがわかります。

どのように私は同じソリューション内の2つの別々のプロジェクトでautomapperを使用するのですか?

アイデアは大変ありがとうございます。あなたがクラスをマッピングしたいとき

// DTO project 
MapperConfiguration dtoConfig; 

dtoConfig = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Foo, Bar>(); 
    cfg.AddProfile<DtoProfile>(); 
}); 

// MVC project 
MapperConfiguration mvcConfig; 

mvcConfig = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Foo, Bar>(); 
    cfg.AddProfile<MvcProfile>(); 
}); 

はその後に適切な設定を使用します。

+1

AutoMapper 5以降を使用していますか?次に、私はあなたが別々に各設定を保存することができると思う静的な 'Mapper'呼び出しを使用する代わりに' config.CreateMapper(); 'を使って各レイヤーのマッパーを作成します。 – stuartd

+0

@stuartdこれを回答児に変更します。完璧に私のために働いた。 –

+0

完了、ありがとう... – stuartd

答えて

1

あなたは、各プロジェクトにAutoMapperの設定を保存することにより分離し、その後、マッパーを作成するために、コンフィギュレーションを使用してマッピングを維持することができますマッパーを作成してください:

var mapper = mvcConfig.CreateMapper(); 
mapper.Map<Foo, Bar>(foo); 
関連する問題