現在、AutoMapper が私たちのプロジェクトに役立つかどうかを評価しています。私は ASP.NET Web API を使用して RESTful Web API に取り組んでおり、返さなければならないものの 1 つは、リンクを含むリソースです。次のドメイン オブジェクトを使用して、この単純化された例を検討してください。
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; }
}
Links プロパティには、関連するリソースへのリンクを含める必要があります。現在、次のアプローチを使用してそれらを構築できます。
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では失敗するかもしれません.