2013-06-04 2 views
2

Я хочу получить доступ к вызову Service изнутри метода ServiceRunnerOnBeforeRequest(), чтобы добраться до объекта в вызывающем сервисном классе. В 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, как я могу извлечь ProductsService объект из OnBeforeRequest(), так что я могу добраться до Data?

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

     base.OnBeforeExecute(requestContext, request); 
    } 
} 

ответ

3

После долгих рыть, похоже, это невозможно. Действие службы доступно в ServiceRunner как неназванный делегат lamdba. Ссылка на Сервис отсутствует.

Вместо этого я нашел обходное решение. Я первый зарегистрированный MyData в AppHost.Configure() с использованием

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.

Смежные вопросы