2016-10-27 9 views
3

私はAutoMapperを使用しており、汎用変換をさらに進めたいと考えています。コンテナからTへのすべての変換が同じであるので、それは次のようになりAutoMapper汎用変換

cfg.CreateMap<Container<T>, T>() 
    .ConvertUsing(new ContainerConverter<Container<T>, T>()); 

:代わりに、私はむしろのような、任意のコンテナをマッピングする方法を知ってAutoMapperを設定します

cfg.CreateMap<Container<int>, int>() 
    .ConvertUsing(new ContainerConverter<Container<int>, int>()); 

ようなものを言うの私が変換しているすべてのクラスに対してこの変換を再定義するのは無意味です。

答えて

2

これはAutomapperを使用しない一般的な、ここで必要に応じて変更できることを基本的な例である

/// <summary> 
/// Maps one object into a new object of another type 
/// </summary> 
public static TResult Map<TSource, TResult>(this TSource source) 
    where TSource : class 
    where TResult : class, new() 
{ 
    var ret = new TResult(); 
    source.Map(ret); 
    return ret; 
} 

/// <summary> 
/// Maps one object into an existing object of another type 
/// </summary> 
public static void Map<TSource, TResult>(this TSource source, TResult destination) 
    where TSource : class 
    where TResult : class 
{ 
    if (Mapper.FindTypeMapFor<TSource, TResult>() == null) 
     Mapper.CreateMap<TSource, TResult>(); 
    Mapper.Map(source, destination); 
} 
+0

として、独自のマップ・メソッドを作成します。回避策は、おそらく、質問への答えではありません。 – Amy

+0

編集した解答を確認してください。すべてのコードが貼り付けられているわけではありません。申し訳ありません:) – Kyle

+0

ああ、私はそれが起こるときに嫌い:)確かに、それは良いです。 – Amy

関連する問題