1
如果我有一些實現相同接口的類,那麼它們都包含相同的屬性。有沒有辦法將格式化程序添加到這些屬性?我只找到了將格式化程序添加到特定屬性類型的可能性。Automapper:接口屬性的格式化
下面是一些代碼,應該澄清我的意思:
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>();
}
試試這個http://valueinjecter.codeplex.com/,這是一個完全不同的方法到映射,你可以想象一個界面,它仍然可以工作(你自己做慣例) – Omu 2010-08-02 10:38:42
感謝您的建議。我會看看它。 – davehauser 2010-08-03 18:39:57