2013-07-15 1 views
4

실제 메서드 호출 전후에 일부 작업을 수행하기 위해 Ninject 인터셉터를 사용하고 있지만 이러한 작업을 비동기 적으로 수행해야합니다. 다음 기사 making-ninject-interceptors-work-with-async-methods을 살펴보고 해당 비동기 부분을 구현했습니다.하지만 이제는 마지막 부분이 하나 빠져있어서 인터셉트 메소드에서 완료 할 작업을 대기/비 차단 대기로 처리하고 있습니다.Ninject 인터셉터의 인터셉트 메서드를 비동기 메서드로 만들기

  • 나는이되고 싶어하기 때문에 나는 대기를 사용할 수 없습니다 아마, 내가 심지어이 방법에 비동기를 넣어 시도하고 난 여전히 문제가 비 차단 작업

    /// <summary> 
    /// Intercepts the specified invocation. 
    /// </summary> 
    /// <param name="invocation">The invocation to intercept.</param> 
    public void Intercept(IInvocation invocation) 
    { 
        Task<bool> resultTask = InterceptAsync(invocation); 
        if (resultTask.Exception != null) 
         throw new Exception("Exception.", resultTask.Exception.InnerException); 
    } 
    
    
    /// <summary> 
    /// Intercepts the specified invocation. 
    /// </summary> 
    /// <param name="invocation">The invocation to intercept.</param> 
    protected async Task<bool> InterceptAsync(IMyInvocation invocation) 
    { 
        await BeforeInvokeAsync(invocation); 
        if (!invocation.Cancel) 
        { 
         invocation.Proceed(); 
         await AfterInvokeAsync(invocation); 
        } 
        return true; 
    } 
    
  • 비동기 사실과이

    /// <summary> 
    /// Intercepts the specified invocation. 
    /// </summary> 
    /// <param name="invocation">The invocation to intercept.</param> 
    public async void Intercept(IInvocation invocation) 
    { 
        Task<bool> resultTask = InterceptAsync(invocation); 
        await resultTask; 
        if (resultTask.Exception != null) 
         throw new Exception("Exception.", resultTask.Exception.InnerException); 
    } 
    

이 있습니까 무효 방법을 완전히 비동기이 실제 할 수있는 방법을 나를 thod?

+0

나는 Ninject에 현재의 디자인은 단지 비동기 사전 실행을 허용하지 않습니다 확신 해요. NInject 지원을 통해이 문제를 제기하는 것이 좋습니다. –

+0

명확히하기 위해,'Proceed'는'Intercept'에서 동 기적으로 호출되어야한다는 것을 의미합니다. –

+0

나는 당신이 말하고있는 것을 이해하는지 모르겠다. _Proceed는 Intercept_에서 동 기적으로 호출되어야한다. Intercept가 비동기 적으로 (그리고 나머지 차단) 설계되지 않았기 때문에 동 기적으로 호출되어야 함을 의미 하는가? BTW 어제 Ninject Interception GitHub 문제 섹션에서 질문을 제기 했으므로 어떻게 될지 알아볼 것입니다. – khorvat

답변

1

나는이 문제에서 나의 길을 해킹 강요하고 난 비동기 /가을 기다리고 수 있도록 Ninject.Extensions.Interception 내부 코드의 몇 비트를 변경했습니다.

난 그냥 코드를 테스트 시작하고 지금까지이 전에이가 작동하고 호출 진행 기다리는 것 같다. 나는 이것으로 놀기에 더 많은 시간을 필요로하기 때문에 모든 것이 예상대로 작동한다는 것을 100 % 확신하지는 못합니다. 따라서 버그를 발견하거나 제안을하면 구현을 확인하고 저에게 다시 연락하십시오. 중요

https://github.com/khorvat/ninject.extensions.interception

은 - LinFu 비동기 대기를 허용 할 수 있습니다 방법으로 프록시 클래스를 생성으로이 솔루션은 LinFu DynamicProxy에서만 작동합니다.

참고 :이 솔루션은 "해킹"이며 완전한 비동기 차단 구현은 아닙니다. * 반드시 *이 동 기적으로 호출 할 Proceed``때문에

안부

관련 문제