【问题标题】:Vertical slice architecture with ServiceStack使用 ServiceStack 的垂直切片架构
【发布时间】:2020-06-24 05:14:09
【问题描述】:

我有一个dotnet newtemplate project,我正在使用 servicestack 为服务层做vertical slice architecture

即使约定是使用{hello}.cs / {hello}Response.cs / {hello}Service.cs

我项目中的所有内容都称为 Request.cs / Response.cs / Service.cs,因为它们都存在于自己的命名空间中。

一切正常,但现在/meta 页面上的所有内容都无法区分,除了端点网址。

无论如何我可以解决这个问题吗? servicestack 中是否有某种属性可以用来装饰我的每个请求、响应 DTO 和服务类;以便他们适当地填充服务发现/元页面?

如果不存在这样的东西,我将如何实现我的要求?是否可以通过创建插件或其他东西来修改 servicestack 的行为?

干杯!

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    ServiceStack 的metadata page 不可自定义,但您应该能够轻松创建自己的自定义视图,以您喜欢的方式显示。 ServiceStack 中关于您的服务的元数据可从 IAppHost.Metadata API 获得,该 API 返回填充的 ServiceMetadata 对象图。

    如果您启用#Script Pages,您可以将集合注册为全局变量:

    Plugins.Add(new SharpPagesFeature {
        Args = {
            {"meta", HostContext.Metadata},
        }
    });
    

    然后在 /metaview.html 这样的自定义页面中,您可以根据需要对服务进行分组、排序和排序,例如这是grouping 可用操作的示例,按命名空间并显示指向每个操作 JSON 元数据页面的链接:

    {{ meta.Operations |> groupBy => it.RequestType.Namespace |> to => namespaces }}
    {{#each namespaces}}
    <b>{{it.Key}}</b>
    <ul>{{#each it}}<li><a href="/json/metadata?op={{it.Name}}">{{it.Name}}</a></li>{{/each}}</ul>
    {{/each}}
    

    meta 集合在您的Debug Inspector 中可用,它为您提供了一个交互式游乐场,可以即时反馈您希望如何显示您的服务,您可以将其粘贴到您的/metadata/debug page 以查看输出:

    这使您可以快速尝试布局,例如如果您只想显示自己的 ServiceStack 服务而不显示任何 ServiceStack 服务,您可以像这样过滤它:

    {{ meta.Operations |> groupBy => it.RequestType.Namespace |> to => namespaces }}
    {{#each namespaces where !it.Key.startsWith('ServiceStack') }}
    <b>{{it.Key}}</b>
    <ul>{{#each it}}<li><a href="/json/metadata?op={{it.Name}}">{{it.Name}}</a></li>{{/each}}</ul>
    {{/each}}
    

    如果您是 #Script 的新手,我建议您通过 #Script's interactive LINQ Examples 在实践中了解它。

    当然,如果这是您的偏好,您也可以使用 ServiceStack.Razor,您可以从 HostContext.Metadata 单例中访问您的 Razor .cshtml 页面。

    【讨论】:

    • 这太棒了。非常感谢您的详细回答。顺便说一句,您在 servicestack 上做得非常出色。我对它印象深刻。我将在几个月内购买许可证。太棒了!!!
    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 2019-09-29
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多