1

.CreateMap メソッドを呼び出さなければならないのはなぜですか?

実際には、 .Map メソッドの呼び出しに同じソース/宛先パラメーターがあることは完全に明らかです。

「気に入らなければ使うな」という典型的なケースでしょうか。

または、私が知らない1行でマッピングを行う簡単で面倒でない方法はありますか?

Mapper.CreateMap<ReleaseViewModel, Release>();
Release release = (Release)Mapper.Map(releaseViewModel, typeof(ReleaseViewModel), typeof(Release));
4

5 に答える 5

4

私はしばらくの間、同じことに困惑していました。オブジェクト ab を構成なしでマップしたい場合はどうすればよいでしょうか? さて、方法があることがわかりました:

Mapper.DynamicMap<MyType>(mySourceObject);

Map は、ソースとターゲットの間のコントラクトが常に明示的に定義されている状況で使用することを目的としています。したがって、この契約の省略は、この使用原則に違反しています。

于 2013-04-23T12:21:55.133 に答える
1

マッピングをオートマッパーに登録する方法として「CreateMap<>」が表示されると思います。「Map()」は実際に登録されたマッピングを実行しています。

「CreateMap<>」には、マッピングを細かくするための追加のメソッドがあり、それ自体がこれら 2 つのメソッドを分離する理由です。それを「関心の分離」の原則と考えてください。

ワンライナーラッパー

public abstract class Mapper<TFrom, TTo>
{
    private void Configure()
    {
        Mapper.CreateMap<TFrom, TTo>();
    }

    public TTo Map(TFrom @from)
    {
        Configure();
        return Mapper.Map<TFrom, TTo>(@from);
    }

    public IEnumerable<TTo> Map(IEnumerable<TFrom> fromList)
    {
        return fromList == null
            ? null 
            : fromList.Select(Map).ToList();
    }
}
于 2012-08-10T10:07:59.353 に答える
0

マッピングを AutoMapper に登録する方法です。このメソッドの利点の 1 つは、次のように呼び出すことができることです。

Mapper.AssertConfigurationIsValid(); 

マッピングが有効かどうかを確認します。

簡単にするために、すべてのマッピングを配置する単一の場所を作成できます (たとえば、ASP.NET MVC の場合、Global.asax の ApplicationStart に配置できます)。

ところで、Map-method では、以下も使用できます。

Release release = Mapper.Map<ReleaseViewModel,Release>(releaseViewModel);
于 2012-08-10T10:18:18.313 に答える
0

わかった... EmitMapper: ワンライナーですが、地獄のように読みにくいです ;-)

Release release = ObjectMapperManager.DefaultInstance.GetMapper<ReleaseViewModel,Release>().Map(releaseViewModel);

http://emitmapper.codeplex.com/

于 2012-08-10T10:45:54.277 に答える
0

これが、単純な 1<->1 マッピングに Value Injector を好む理由です。ここでそれについて読んでください:http://valueinjecter.codeplex.com/

次のように簡単です。

myObject.InjectFrom(anyOtherObject);

また、同じ名前と型を持つプロパティを暗黙的にマップします。

于 2012-08-10T12:06:41.457 に答える