我想从Service
ServiceRunner
方法中访问调用OnBeforeRequest()
,以便访问调用服务类中的对象。在MVC中,我可以创建一个覆盖BaseController
的类OnActionExecuting()
,我可以轻松地访问Data
。但是,使用ServiceRunner
,因为它不是从Service派生的,所以我看不到到达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);
}
}
答案 0 :(得分: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
类,并且可以将会话ID设置为Data
。