IEnumerable を返すリクエスト クラス AllCustomers があるとします。
[Route("/customers")]
public class AllCustomers : IReturn<IEnumerable<Customer>>
{
}
そのリクエストのメタデータ ページに移動すると、次のクラッシュが発生します。
[MemberAccessException: Cannot create an abstract class.]
System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) +0
System.Runtime.Serialization.FormatterServices.GetUninitializedObject(Type type) +56
ServiceStack.Text.<>c__DisplayClass3.<GetConstructorMethodToCache>b__1() +38
ServiceStack.Text.ReflectionExtensions.CreateInstance(Type type) +64
ServiceStack.WebHost.Endpoints.Metadata.JsonMetadataHandler.CreateMessage(Type dtoType) +49
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.CreateResponse(Type type) +267
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.ProcessOperations(HtmlTextWriter writer, IHttpRequest httpReq, IHttpResponse httpRes) +688
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.Execute(HttpContext context) +267
ServiceStack.WebHost.Endpoints.Support.HttpHandlerBase.ProcessRequest(HttpContext context) +84
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
特定のリクエストに対する応答が IEnumerable の場合、メタデータ ページの実装はクラッシュしないはずです。これは、サービスへのインターフェイスを実装するための完全に有効な方法だからです (そして、リストを返すよりも望ましい方法です)。戻り値の型として IEnumerable が認識される場合は、サンプル セクションの List をインスタンス化するのに十分スマートである必要があります。戻り値の型がインスタンス化できない場合でも、少なくともクラッシュすることはありません...