/// <inheritdoc />
        public override void OnException(IInvocationPipeline pipeline)
        {
            Console.WriteLine("ReplaceExceptionAspect OnException called");

            pipeline.ContinueFaulted(
                new ApplicationException("Additional exception info", pipeline.CurrentException));
        }
Exemplo n.º 2
0
 protected override void Exit(IInvocationPipeline pipeline)
 {
     base.Exit(pipeline);
     if (_boundaryType == BoundaryType.Exit)
     {
         ThrowException(CreateException(_exceptionType), pipeline);
     }
 }
Exemplo n.º 3
0
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     base.OnSuccess(pipeline);
     if (_boundaryType == BoundaryType.Success)
     {
         ThrowException(CreateException(_exceptionType), pipeline);
     }
 }
Exemplo n.º 4
0
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     base.OnSuccess(pipeline);
     if (_boundaryType == BoundaryType.Success)
     {
         pipeline.Return();
     }
 }
Exemplo n.º 5
0
 protected override void Exit(IInvocationPipeline pipeline)
 {
     base.Exit(pipeline);
     if (_boundaryType == BoundaryType.Exit)
     {
         pipeline.Return();
     }
 }
Exemplo n.º 6
0
 protected override void Exception(IInvocationPipeline pipeline)
 {
     base.Exception(pipeline);
     if (_boundaryType == BoundaryType.Exception)
     {
         pipeline.Return(_valueToReturn);
     }
 }
Exemplo n.º 7
0
        protected void ThrowException(Exception exception, IInvocationPipeline pipeline)
        {
            if (_throwAsUnhandled)
            {
                throw exception;
            }

            pipeline.Throw(exception);
        }
        public void ExecutePipeline(IInvocationPipeline basePipeline, IInvocation invocation)
        {
            // Это нарушает solid, но позволяет не выставлять кучу классов наружу библиотеки.
            var pipeline = (InvocationPipeline)basePipeline;

            pipeline.Init(invocation);

            var entryState = new EntryState <InvocationPipeline>(
                pipeline.BoundaryAspects, pipeline.InterceptionAspect);

            InvocationStateMachine.Execute(pipeline, entryState);
        }
Exemplo n.º 9
0
 /// <inheritdoc />
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     // Если по Id-нику смогли что-то найти
     if (pipeline.CurrentReturnValue != null)
     {
         var cacheKey = (string)pipeline.ExecutionState;
         Cache.Set(cacheKey, pipeline.CurrentReturnValue);
         Console.WriteLine($"Aspect OnExit: Set '{pipeline.Context.Method.ReturnType.Name}' to cache with key '{cacheKey}'");
     }
     else
     {
         Console.WriteLine("Aspect OnExit: SUnable to save value to cache");
     }
 }
Exemplo n.º 10
0
 /// <summary>
 /// Создает экземпляр <see cref="InvocationWeaveData"/> с признаком
 /// возможности применения аспектов.
 /// </summary>
 /// <param name="pipeline">Пайплайн.</param>
 /// <param name="pipelineExecutor">Компонент выполнения пайплайна.</param>
 /// <param name="boundaryAspects">Аспекты <see cref="MethodBoundaryAspect"/>.</param>
 /// <param name="interceptionAspect">Аспект <see cref="MethodInterceptionAspect"/>.</param>
 /// <returns>Экземляр <see cref="InvocationWeaveData"/>.</returns>
 internal static InvocationWeaveData Weavable(
     IInvocationPipeline pipeline,
     IInvocationPipelineExecutor pipelineExecutor,
     IReadOnlyCollection <MethodBoundaryAspect> boundaryAspects,
     MethodInterceptionAspect interceptionAspect)
 {
     return(new InvocationWeaveData
     {
         IsWeaveable = true,
         Pipeline = pipeline,
         PipelineExecutor = pipelineExecutor,
         BoundaryAspects = boundaryAspects,
         InterceptionAspect = interceptionAspect
     });
 }
Exemplo n.º 11
0
        /// <inheritdoc />
        public override void OnException(IInvocationPipeline pipeline)
        {
            Console.WriteLine("SwallowExceptionAspect OnException called");

            Console.WriteLine($"Exception '{pipeline.CurrentException.GetType().Name}'; " +
                              $"Exception Message: '{pipeline.CurrentException.Message}'");

            var innerException = pipeline.CurrentException.InnerException;

            if (innerException != null)
            {
                Console.WriteLine($"InnerException '{innerException.GetType().Name}'; " +
                                  $"InnerException Message: '{innerException.Message}'");
            }

            pipeline.Continue();
        }
Exemplo n.º 12
0
        /// <inheritdoc />
        public override void OnEntry(IInvocationPipeline pipeline)
        {
            var cacheKey = CreateCacheKey(pipeline);

            // Если смогли достать значение - прерываем пайплайн вызовом ReturnValue
            if (Cache.TryGetValue(cacheKey, out var cached))
            {
                Console.WriteLine($"Aspect OnEntry: Return '{pipeline.Context.Method.ReturnType.Name}' with key '{cacheKey}' from cache");
                pipeline.Return(cached);
            }
            // Значение нет в кеше
            else
            {
                Console.WriteLine($"Aspect OnEntry: Key '{cacheKey}' not found in cache. Calling method...");
                // Записываем в состояние ключ кеша для сохранения значения
                pipeline.ExecutionState = cacheKey;
            }
        }
Exemplo n.º 13
0
        public void ExecutePipeline(IInvocationPipeline basePipeline, IInvocation invocation)
        {
            // Это нарушает solid, но позволяет не выставлять кучу классов наружу библиотеки.
            var pipeline = (AsyncInvocationPipeline)basePipeline;

            pipeline.Init(invocation);

            switch (pipeline.Invocation.InvocationType)
            {
            case InvocationType.AsyncAction:
                pipeline.Invocation.ReturnValue = SignalWhenAwait(pipeline);
                break;

            case InvocationType.AsyncFunction:
                var signalWhenAwait = GetAsyncFunctionHandler(_handlersCache, pipeline.Invocation);
                pipeline.Invocation.ReturnValue = signalWhenAwait(this, new object[] { pipeline });
                break;

            default:
                throw new NotSupportedException(
                          $"Асинхронное выполнение метода типа '{pipeline.Invocation.InvocationType}' не поддерживается");
            }
        }
Exemplo n.º 14
0
 protected override void Exception(IInvocationPipeline pipeline)
 {
     pipeline.ContinueFaulted(CreateException(_exceptionType, pipeline.CurrentException));
 }
        /// <inheritdoc />
        public override void OnEntry(IInvocationPipeline pipeline)
        {
            var str = JsonConvert.SerializeObject(pipeline.Context.Arguments.ElementAt(0), Formatting.Indented);

            Console.WriteLine($"LogMethodAspect: Method called with first arg : {str}");
        }
 public override void OnException(IInvocationPipeline pipeline)
 {
     pipeline.ContinueFaulted(new InvalidOperationException(string.Empty, pipeline.CurrentException));
 }
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     throw new ArgumentNullException();
 }
            public override void OnSuccess(IInvocationPipeline pipeline)
            {
                var value = (int)pipeline.CurrentReturnValue;

                pipeline.Return(value + 1);
            }
 public override void OnEntry(IInvocationPipeline pipeline)
 {
     pipeline.Return(new object());
 }
Exemplo n.º 20
0
 protected virtual void Exit(IInvocationPipeline pipeline)
 {
 }
 public override void OnException(IInvocationPipeline pipeline)
 {
     pipeline.Return();
 }
Exemplo n.º 22
0
 protected virtual void Success(IInvocationPipeline pipeline)
 {
 }
Exemplo n.º 23
0
 public override void OnExit(IInvocationPipeline pipeline)
 {
     ExecutionStack.Push(new BoundaryState(BoundaryType.Exit));
     Exit(pipeline);
 }
Exemplo n.º 24
0
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     ExecutionStack.Push(new BoundaryState(BoundaryType.Success));
     Success(pipeline);
 }
Exemplo n.º 25
0
 protected abstract void Install(IInvocationPipeline pipeline, TProperties properties);
Exemplo n.º 26
0
 public override void OnSuccess(IInvocationPipeline pipeline)
 {
     base.OnSuccess(pipeline);
     Console.WriteLine("Aspect: OnSuccess");
 }
Exemplo n.º 27
0
 void IInterceptor.Install(IInvocationPipeline pipeline, object properties) =>
 Install(pipeline, (TProperties)properties);
Exemplo n.º 28
0
 public void Install(IInvocationPipeline pipeline, object properties)
 {
     pipeline.Register("test_actor_interception", new TestActorInterceptionInvoker());
     pipeline.Register("test_stream_interception", new TestStreamInterceptionInvoker());
 }
Exemplo n.º 29
0
 public override void OnEntry(IInvocationPipeline pipeline)
 {
     base.OnEntry(pipeline);
     Console.WriteLine("Aspect: OnEntry");
 }
Exemplo n.º 30
0
 protected virtual void Entry(IInvocationPipeline pipeline)
 {
 }