如何将自定义ServiceStack RequestFilterAttribute应用于自动生成的服务?

时间:2015-03-03 03:09:05

标签: servicestack

我有一个自定义的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);

但我希望有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您想自定义AutoQuery行为,首先应该查看extensibility options using Query Filters提供的内容。

否则,您应该能够将RequestFilter属性添加到R​​equest 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();
}