Si certaines classes implémentent la même interface, elles contiennent toutes la même propriété. Est-il possible d'ajouter un formateur à ces propriétés? J'ai seulement trouvé la possibilité d'ajouter un formateur à un type de propriété spécifique.Automapper: Formatter pour la propriété d'interface
est ici un code qui devrait clarifier ce que je veux dire:
public interface ITaggable
{
IList<string> Tags { get; set; }
}
public class Post : ITaggable
{
public IList<string> Tags { get; set; }
public IList<string> Categories { get; set; }
...
}
public class Page : ITaggable
{
public IList<string> Tags { get; set; }
....
}
J'aimerais suivre ces voir des modèles qui ressemblent à ceci:
public class PostViewModel
{
public string Tags { get; set; }
public IList<string> Categories { get; set; }
...
}
public class PageViewModel
{
public string Tags { get; set; }
...
}
Si un Post
a les balises "foo" et "bar", la propriété Tags
doit contenir la chaîne "foo, bar". Categories
devrait rester un IList<string>
.
je pourrais y arriver en créant un formatter personnalisé, puis l'ajouter sur chaque carte, comme ceci:
protected override void Configure()
{
CreateMap<Post, PostViewModel>()
.ForMember(x => x.Tags, opt => opt.AddFormatter<TagsFormatter>());
CreateMap<Page, PageViewModel>()
.ForMember(x => x.Tags, opt => opt.AddFormatter<TagsFormatter>());
}
Mais je voudrais faire quelque chose comme ça (ce code ne fonctionne pas; -)
protected override void Configure()
{
ForSourceType<ITaggable>()
.ForMember(x => x.Tags, opt => opt.AddFormatter<TagsFormatter>());
CreateMap<Post, PostViewModel>();
CreateMap<Page, PageViewModel>();
}
essayer cette http://valueinjecter.codeplex.com/, c'est une approche totalement différente à la cartographie, vous pouvez imaginer une interface et cela fonctionnera encore (vous faites vos propres conventions) – Omu
Merci pour votre suggestion. Je vais y jeter un coup d'oeil. – davehauser