2

我想ServiceServiceRunner OnBeforeRequest()方法内部访问调用,以便访问调用服务类中的对象。在 MVC 中,我可以创建一个BaseController覆盖的类,OnActionExecuting()并且可以Data轻松访问。但是,使用ServiceRunner,因为它不是从服务派生的,所以我看不到获取Service对象的方法。

样品服务:

public class ProductsService : Service
{
    private MyData _data = new MyData();

    public MyData Data
    {
         get { return _data; }
    }

    public object Get(GetProduct request)
    {
         // ...
         return product;
    }
}

在我的自定义ServiceRunner中,我如何ProductsService从中检索对象OnBeforeRequest()以便可以访问Data

public class MyServiceRunner<T> : ServiceRunner<T>
{
    public override void OnBeforeExecute(IRequestContext requestContext, T request)
    {
        // var productService = ?

        base.OnBeforeExecute(requestContext, request);
    }
}
4

1 回答 1

3

经过多次挖掘,似乎无法做到这一点。服务操作在ServiceRunner未命名的 lamdba 委托中可用。没有提及该服务。

相反,我找到了一种解决方法。AppHost.Configure()我首先在使用中注册了 MyData

container.RegisterAutoWired<MyData>();

我将 MyData 声明移至如下过滤器属性:

public class UseMyDataAttribute : RequestFilterAttribute
{
    public MyData Data { get; set; } // injected by Funq IoC. 

    public override void Execute(IHttpRequest req, IHttpResponse res, object responseDto)
    {
        Data.SessionID = req.GetSessionId();
    }
}

这样我就可以申请[UseMyData]班级ProductsService并能够将 Session ID 设置为Data.

于 2013-06-10T21:48:19.790 回答