1

私はこのようなマッピングを持っています

Mapper.CreateMap<ISomething, ISomethingDto>();

プロキシを生成する代わりに、ソースの具象タイプに応じて特定の具象タイプを構築するようにAutoMapperを構成したいと思います。例:

class SomethingSpecial : ISomething {...}

class SomethingSpecialDto : ISomethingDto{...}

電話すると

Mapper.Map<ISomething, ISomethingDto>(aSomethingSpecial);

SomethingSpecialDtoのインスタンスを受け取り、プロキシを受け取りません。

4

4 に答える 4

2

ITypeConverterの具体的なタイプをチェックしResolutionContext.SourceValue、適切なマップされたタイプを返す、を実装することになりました。これは機能しますが、AutoMapperを使用せずにマッピングを完全に実装するよりもはるかに優れています。

于 2012-08-23T08:45:19.620 に答える
1

SomethingSpecialとの間に接続はありませんSomethingSpecialDto
これらの具象クラスをマッピングする必要があります。

Mapper.CreateMap<SomethingSpecial, SomethingSpecialDto>(); 
Mapper.CreateMap<SomethingNormal, SomethingNormalDto>(); 
// ...
于 2012-08-21T14:29:44.960 に答える
0

これが私が現在このようなことをしていることです:

Mapper.CreateMap<IAlpha, IAlpha>();

Mapper.Map<IAlpha, IAlpha>(alphaDAO, new AlphaDTO());

これは、プロパティが一致している限り、2つの異なるインターフェイスで機能するはずですが、実際のテストではバックアップできません。

AutoMapperにどのオブジェクトを自動的に作成するかを知らせようとしているのかどうかはわかりませんが、オプションではないかもしれないと感じています。少なくとも、CreateMapメソッドには、特定のMapに遭遇したときにインスタンス化する具体的な型を取得する追加のパラメーターが必要ですが、制限が多すぎます。最終的には、2つの具象クラスを相互にマッピングする方がよいでしょう。AlphaDTOタイプにマップした場合でも、IAlphaを返すことができます。

于 2012-09-06T19:42:00.670 に答える
0

オブジェクトとDTOの間に1:1があるように思われるので、インターフェイスに対してマップを作成する必要はありません。

Mapper.CreateMap<SomethingSpecial, SomethingSpecialDto>();

マッピングフェーズでインターフェイスを処理している場合、トリックはタイプをパラメータとしてマッピング呼び出しに渡すことです。

public ISomethingDto DoMap(ISomething something)
{
   return (ISomethingDto) Mapper.Map(something, something.GetType(), typeof(SomethingSpecialDto));
}
于 2014-02-25T14:44:40.887 に答える