2013-06-04 77 views
2

我想从ServiceRunnerOnBeforeRequest()方法中访问调用Service以便获取调用服务类中的对象。在MVC中,我可以创建一个类BaseController,它覆盖OnActionExecuting(),我能得到Data容易。然而,使用ServiceRunner,因为它不是由服务衍生的,我不明白的方式才能到Service对象。从ServiceRunner访问呼叫服务?

样品服务:

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

    public MyData Data 
    { 
     get { return _data; } 
    } 

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

在我的自定义ServiceRunner,我怎么检索OnBeforeRequest()ProductsService对象,以便我能到Data

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

     base.OnBeforeExecute(requestContext, request); 
    } 
} 

回答

3

经过大量的挖掘,看起来这是不能做到的。服务动作是在ServiceRunner可作为一个无名lamdba委托。没有提及该服务。

我已经找到,而不是一个解决办法。我第一次使用

container.RegisterAutoWired<MyData>(); 

注册迈德特在AppHost.Configure()我感动的迈德特声明过滤器属性是这样的:

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类,并可以设置会话编号为Data