2013-06-04 3 views
2

호출 서비스 클래스의 객체를 얻으려면 ServiceRunnerOnBeforeRequest() 메서드 내부에서 Service 호출에 액세스하려고합니다. MVC에서 나는 OnActionExecuting()을 오버라이드하는 클래스 BaseController을 만들 수 있고 쉽게 Data에 도착할 수 있습니다. 그러나 ServiceRunner을 사용하면 Service에서 파생되지 않기 때문에 Service 개체를 얻을 수있는 방법이 없습니다.ServiceRunner에서 전화 서비스에 액세스 하시겠습니까?

샘플 서비스 : 내 사용자 지정 ServiceRunner에서

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

    public MyData Data 
    { 
     get { return _data; } 
    } 

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

은, 어떻게 내가 Data 얻을 수 있습니다 OnBeforeRequest()에서 ProductsService 개체를 검색합니까?

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

     base.OnBeforeExecute(requestContext, request); 
    } 
} 

답변

3

많은 파기 후에는 할 수없는 것처럼 보입니다. 서비스 작업은 익명의 lamdba 대리인으로 ServiceRunner에서 사용할 수 있습니다. 서비스에 대한 언급이 없습니다.

대신 해결 방법을 찾았습니다.

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(); 
    } 
} 

나는 ProductsService 클래스에 [UseMyData]을 적용하고 세션을 설정할 수 있습니다이 방법 : 내가 먼저 나는이 같은 필터 특성에 MyData로 선언을 이동

container.RegisterAutoWired<MyData>(); 

를 사용 AppHost.Configure()에 MyData로 등록 ID는 Data입니다.

관련 문제