Я пытаюсь использовать Open Generics Automapper, как описано в 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;
}
}
Но я получаю исключение
отсутствующей карты типа конфигурации или неподдерживаемого сопоставления.
типов отображения: User -> Account 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>();
Надеюсь, этого не было! В моем реальном приложении Учетная запись определена в проекте MVC, и Пользователь определен в проекте службы. Проект службы НЕ имеет ссылку на проект MVC, поэтому я не могу сопоставить то, что вы предлагаете. Я могу сделать это Mapper.CreateMap(); но это выполняется для каждого вызова метода GetAccountFromUser (). –
Bryan
Ugh. Я ненавижу проектные макеты, подобные этому. Просто поместите все в один проект и используйте папки. –
Этот корабль отплыл! – Bryan