如何将自定义 ServiceStack RequestFilterAttribute 应用于自动生成的服务?
How do I apply a custom ServiceStack RequestFilterAttribute to an auto-generated Service?
我有一个要应用于我的 ServiceStack 服务的自定义 RequestFilterAttribute:
[MyCustomAttribute]
public class MyService : ServiceStack.Service {...
我最近开始使用 AutoQuery 功能(这很棒),但我想知道如何将 MyCustomAttribute 应用到您 "get for free" 当您的请求 DTO 从 QueryBase 继承时自动生成的服务。
我当然可以使用 "magic" AutoQuery 代码向我的服务添加方法:
SqlExpression<DTO> sqlExpression = AutoQuery.CreateQuery(request, Request.GetRequestParams());
QueryResponse<DTO> response = AutoQuery.Execute(request, sqlExpression);
但我希望有更好的方法?
如果您想自定义 AutoQuery 行为,您应该首先查看 extensibility options using Query Filters 提供的内容。
否则,您应该能够将 RequestFilter 属性添加到请求 DTO 本身,即:
[MyCustomAttribute]
public class MyQuery : QueryBase<Poco> {}
或者,您可以使用以下方式获取对自动生成的服务的引用:
var autoQueryService = appHost.Metadata.GetServiceTypeByRequest(typeof(MyQuery));
然后使用动态API为其添加自定义属性,例如:
autoQueryService
.AddAttributes(new MyCustomAttribute { ... });
由于服务仅在执行 AutoQueryFeature
插件后生成和注册,您只能在加载所有插件后才能访问该服务,您可以这样做:
1) In your own plugin 通过实施 IPostInitPlugin
接口
2) 通过注册一个 AfterInitCallbacks
处理程序:
this.AfterInitCallbacks.Add(appHost => { ... });
3) 通过重写 AppHost 中的 OnAfterInit()
虚拟方法,例如:
public override void OnAfterInit()
{
...
base.OnAfterInit();
}
我有一个要应用于我的 ServiceStack 服务的自定义 RequestFilterAttribute:
[MyCustomAttribute]
public class MyService : ServiceStack.Service {...
我最近开始使用 AutoQuery 功能(这很棒),但我想知道如何将 MyCustomAttribute 应用到您 "get for free" 当您的请求 DTO 从 QueryBase 继承时自动生成的服务。
我当然可以使用 "magic" AutoQuery 代码向我的服务添加方法:
SqlExpression<DTO> sqlExpression = AutoQuery.CreateQuery(request, Request.GetRequestParams());
QueryResponse<DTO> response = AutoQuery.Execute(request, sqlExpression);
但我希望有更好的方法?
如果您想自定义 AutoQuery 行为,您应该首先查看 extensibility options using Query Filters 提供的内容。
否则,您应该能够将 RequestFilter 属性添加到请求 DTO 本身,即:
[MyCustomAttribute]
public class MyQuery : QueryBase<Poco> {}
或者,您可以使用以下方式获取对自动生成的服务的引用:
var autoQueryService = appHost.Metadata.GetServiceTypeByRequest(typeof(MyQuery));
然后使用动态API为其添加自定义属性,例如:
autoQueryService
.AddAttributes(new MyCustomAttribute { ... });
由于服务仅在执行 AutoQueryFeature
插件后生成和注册,您只能在加载所有插件后才能访问该服务,您可以这样做:
1) In your own plugin 通过实施 IPostInitPlugin
接口
2) 通过注册一个 AfterInitCallbacks
处理程序:
this.AfterInitCallbacks.Add(appHost => { ... });
3) 通过重写 AppHost 中的 OnAfterInit()
虚拟方法,例如:
public override void OnAfterInit()
{
...
base.OnAfterInit();
}