Если у меня есть несколько классов, которые реализуют один и тот же интерфейс, они все содержат одно и то же свойство. Есть ли способ добавить форматер к этим свойствам? Я нашел только возможность добавить форматер к определенному типу свойства.
Вот код, который должен прояснить, что я имею в виду:
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; }
....
}
Я бы хотел сопоставить их для просмотра моделей, которые выглядят примерно так:
public class PostViewModel
{
public string Tags { get; set; }
public IList<string> Categories { get; set; }
...
}
public class PageViewModel
{
public string Tags { get; set; }
...
}
Если Post
имеет теги "foo" и "bar", то свойство PostViewModel
'Tags
должно содержать строку "foo, bar". Categories
должен остаться IList<string>
.
Я мог бы сделать это, создав пользовательский форматер, а затем добавить его при каждом отображении, например:
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>());
}
Но я бы хотел сделать что-то подобное (этот код не работает; -)
protected override void Configure()
{
ForSourceType<ITaggable>()
.ForMember(x => x.Tags, opt => opt.AddFormatter<TagsFormatter>());
CreateMap<Post, PostViewModel>();
CreateMap<Page, PageViewModel>();
}