2016-04-15 7 views
1

私は、ServiceStacksルーティングとドキュメント機能を組み込み、ルートと動詞のメッセージタイプの注釈に基づいてサービス操作を公開したいと考えています。一般的なサービスは、受信した要求を別の要求処理サービスに委譲します。ServiceStack CQRSのServiceless

例えば、 与える私はこれらすべてに対処する単純なサービスを作成したいが、同時に動詞をのみを可能にする各 パブリッククラスリクエスト{}

[Route("/order", "POST")] 
public class PlaceOrder : Request { } 

[Route("/order/{id}", "GET")] 
public class OrderDetailsCriteria : Request { 
    Guid OrderId { get; set; } 
} 

public class OrderDetails { } 

[Route("/inventoryItem/{id}", "PATCH")] 
public class ReduceInventory : Request { 
    Guid InventoryItemId { get; set; } 
} 

の動詞で次のタイプと設定されたルートを持っています種類で構成されたような 何か属性:

public class MyService : Service { 
    public void Post(Request request) { 
     RequestService.Send(request); 
    } 

    public void Patch(Request request) { 
     RequestService.Send(request); 
    } 

    public object Get(Request request) { 
     return RequestService.Send(request); 
    } 
} 

それぞれの方法が効果的に同じことをやってますので、基本的に、私は、サービスまたは要求タイプの各セットを作成する必要がありますする必要はありませんが。

答えて

0

あなたは例えば、Any()方法を使用して要求のためのすべての動詞を処理するための単一の実装を定義することができます。

public object Any(MyRequest request) 
{ 
    var verb = base.Request.Verb; //if needed 
    ... 
    RequestService.Send(request); 
} 
+0

ありがとうございました。はい、私の最初の考えはそれを行うことでしたが、私はメタデータ操作のドキュメントを取得しません。だから私はServiceStackがドキュメントを生成できるように型を発見するためにサービス上でリフレクションを使用していると仮定します –

+0

@RicardodaSilvaまた、DToにRequestをDTooに 'IReturn 'または 'IReturnVoid'マーカーを追加することを強くお勧めします。あなたのサービスクライアントのための強力なタイピングと素敵なAPIです。 – mythz