1

https://github.com/AutoMapper/AutoMapper/wiki/Open-Genericsで説明されているように、Automapper の Open Generics を使用して、ユーザーとアカウントの間のマッピングを実行しようとしています。

public class User
{
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
}

public class Account
{
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
}

ソースと宛先を作成しました

public class Source<T>
{
    public T Value { get; set; }
}

public class Destination<T>
{
    public T Value { get; set; }
}

AccountService でマッピングを実行したい

public class AccountService
{
    private User user1 = new User{FirstName = "James", LastName = "Jones", Dob = DateTime.Today, UserId = new Guid("AC482E99-1739-46FE-98B8-8758833EB0D2")};

    static AccountService()
    {
        Mapper.CreateMap(typeof(Source<>), typeof(Destination<>));
    }

    public T GetAccountFromUser<T>()
    {
        var source = new Source<User>{ Value = user1 };
        var destination = Mapper.Map<Source<User>, Destination<T>>(source);
        return destination.Value;
    }
}

しかし、私は例外を取得します

タイプ マップ構成が欠落しているか、サポートされていないマッピングです。

マッピング タイプ: ユーザー -> アカウント OpenGenerics.Console.Models.User -> OpenGenerics.Console.Models.Account

宛先パス: Destination`1.Value.Value

ソース値: OpenGenerics.Console.Models.User

https://github.com/AutoMapper/AutoMapper/wiki/Open-Genericsでのアプローチが機能することintを確認しましたdouble

編集 これは私にとっては解決策かもしれませんが、少し面倒です。

    var mappingExists = Mapper.GetAllTypeMaps().FirstOrDefault(m => m.SourceType == typeof (User) && m.DestinationType == typeof (T));
    if (mappingExists == null)
        Mapper.CreateMap<User, T>();
4

1 に答える 1

2

クローズ ジェネリックの場合、型パラメーターもマップできる必要があります。これを追加:

Mapper.CreateMap<User, Account>();

そして、あなたは設定されています。

于 2015-08-05T15:15:32.140 に答える