J'essaie d'utiliser Open Generics d'Automapper comme décrit dans https://github.com/AutoMapper/AutoMapper/wiki/Open-Generics pour effectuer un mappage entre Utilisateur et Compte.Automapper et 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; }
}
J'ai créé la source et la destination
public class Source<T>
{
public T Value { get; set; }
}
public class Destination<T>
{
public T Value { get; set; }
}
Je veux effectuer la mise en correspondance dans un 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;
}
}
Mais je reçois une exception
carte de type manquant configuration ou mappage non pris en charge.
types de cartographie: l'utilisateur -> Compte OpenGenerics.Console.Models.User -> OpenGenerics.Console.Models.Account
Chemin de destination: Destination`1.Value.Value
valeur Source: OpenGenerics .Console.Models.User
Je confirme l'approche https://github.com/AutoMapper/AutoMapper/wiki/Open-Generics travaux pour int
et double
Modifier Cela peut être une solution pour moi, c'est un peu compliqué.
var mappingExists = Mapper.GetAllTypeMaps().FirstOrDefault(m => m.SourceType == typeof (User) && m.DestinationType == typeof (T));
if (mappingExists == null)
Mapper.CreateMap<User, T>();
Espérait que ce n'était pas le cas! Dans ma vraie application, le compte est défini dans le projet MVC et l'utilisateur est défini dans le projet Service. Le projet Service n'a PAS de référence au projet MVC, donc je ne peux pas mapper comme vous le suggérez. Je peux le faire Mapper.CreateMap(); mais ceci est exécuté pour chaque appel à la méthode GetAccountFromUser (). –
Bryan
Pouce. Je déteste les mises en page de projets comme celle-ci. Mettez tout simplement dans un projet et utilisez des dossiers. –
Ce bateau a navigué! – Bryan