我目前的评估AutoMapper是否有利于我们的项目。 我正在使用的ASP.NET Web API一个REST的Web API,和的事情,我必须返回一个包含链接的资源。 考虑该简化示例中,使用以下的域对象:
public class Customer
{
public string Name { get; set; }
}
我需要把这个映射到一个资源对象,有点像一个DTO但添加的属性,以方便REST。 这就是我的资源对象可能是这样的:
public class CustomerResource
{
public string Name { get; set; }
public Dictionary<string, string> Links { get; set; }
}
链接属性将需要包含相关资源的链接。 现在,我可以使用下面的方法构建它们:
public IEnumerable<CustomerResource> Get()
{
Func<Customer, CustomerResource> map = customer =>
new CustomerResource
{
Name = customer.Name,
Links = new Dictionary<string, string>()
{
{"self", Url.Link("DefaultApi", new { controller = "Customers", name = customer.Name })}
}
}
var customers = Repository.GetAll();
return customers.Select(map);
}
...但是这是非常繁琐的,我有很多的嵌套的资源,这样的。 我看到的问题是,我不能使用AutoMapper,因为它不会让我提供范围限定到执行映射操作的点投影过程中所需的某些事情。 在这种情况下,ApiController的URL属性提供UrlHelper情况下,我需要创建链接给我,但可能还有其他案件。
你将如何解决这个难题?
PS我输入了这个代码专门针对这个问题,它在你的头编译,但在你喜欢的IDE可能会失败。