带有 ServiceStack 的垂直切片架构

Vertical slice architecture with ServiceStack

我有一个 dotnet new template project where i'm doing vertical slice architecture 用于使用 servicestack 的服务层。

尽管惯例是使用 {hello}.cs / {hello}Response.cs / {hello}Service.cs,

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

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

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

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

干杯!

ServiceStack 的 metadata page isn't customizable, but you should easily be able to create your own customized view that's displayed how you like. The metadata ServiceStack has about your Services is available from IAppHost.Metadata API which returns a populated ServiceMetadata 对象图。

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

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

然后在像 /metaview.html 这样的自定义页面中,您可以根据需要对服务进行分组、排序和排序,例如这是按命名空间显示 grouping 可用操作并向每个操作显示 link 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 which gives you an interactive playground with instant feedback on how you want your Services displayed which you can paste into your /metadata/debug page 中查看输出:

这使您可以快速试验布局,例如如果你只想展示你自己的和 none 的 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 I recommend going through #Script's interactive LINQ Examples 的新手,请在实践中了解它。

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