2

私は ServiceStack の新しい API を使用するのが好きで、レガシー プロジェクトにいくつかの Poco があり、変更しないでおきたいと思っています。ただし、私の ServiceStack プロジェクトでそれらを Dto に複製するのは少し不必要だと感じています。怠け者になって、どうにかしてプロパティをレガシー pocos に「パススルー」できますか?

これは JsonServiceClient でうまく機能しますが、json に余分なレベルが追加されます。これは私は好きではありません。

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public LegacyTypeLegacyType{ get; set; }
}

public class LegacyTypeService : Service
{
    public object Post(RequestLegacyTypePost request)
    {
        return db.Insert(request.LegacyType);
    }
}

プロパティを DTO にコピー アンド ペーストする方法は、自然に正常に機能します。

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public int Id { get; set; }
    public string SomeProp { get; set; }
    public string OtherProp { get; set; }
}

そして、おそらくその単純さがベストプラクティスでしょうか?

4

2 に答える 2

2

ServiceStack を使用すると、既存の Poco をリクエスト DTO として再利用できます。既存のレガシー dll を変更したくない場合は、AppHost.Configure() で Fluent API を使用して非侵襲的にルートを追加できます。

Routes
    .Add<LegacyTypeLegacyType>("/legacytype", "POST,OPTIONS");
于 2013-03-20T14:33:01.080 に答える
1

モデルを次のようなカスタム DTO に継承することもできます。

[Route("/legacytype", "POST,OPTIONS")]
RequestLegacyTypeDTO : LegacyType, IReturn<int> { }

LegacyTypeこれにより、元のモデルを変更せずに、そのすべてのプロパティにアクセスできます。

于 2013-03-20T14:23:58.817 に答える