我有一个自定义的RequestFilterAttribute,我正在申请我的ServiceStack服务:
[MyCustomAttribute]
public class MyService : ServiceStack.Service {...
我最近开始使用AutoQuery功能(这很棒),但我想知道如何将MyCustomAttribute应用于您免费获得的自动生成的服务"当您的请求DTO继承自QueryBase时。
我当然可以使用" magic"为我的服务添加方法。 AutoQuery代码:
SqlExpression<DTO> sqlExpression = AutoQuery.CreateQuery(request, Request.GetRequestParams());
QueryResponse<DTO> response = AutoQuery.Execute(request, sqlExpression);
但我希望有更好的方法吗?
答案 0 :(得分:0)
如果您想自定义AutoQuery行为,首先应该查看extensibility options using Query Filters提供的内容。
否则,您应该能够将RequestFilter属性添加到Request 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();
}