コード例 #1
0
        public async Task InterceptionTestV2()
        {
            //Configuration
            var count = 0;

            TraceData[] traceReceived = { };

            using (var tracer = new TraceSourceSync(new TraceConfig {
                TraceBehavior = TraceStaticBehavior.AddListenerToStaticAccessAndRemoveDefaultTracer, PageSize = 2
            }))
            {
                _container.RegisterInstance(tracer);

                _container.RegisterInterceptor <InterceptorTraceInjectTracer>(LifeTime.Singleton);
                _container.RegisterInterceptor <InterceptorTraceStatic>(LifeTime.Singleton);
                _container.Register <IClassVoidTest, ClassVoidTest>(LifeTime.Singleton);

                _container.InterceptAny(type => type.Name.Contains("lassVoidT")).With <InterceptorTraceInjectTracer>();
                _container.InterceptAny(type => type.Name.Contains("lassVoidT")).With <InterceptorTraceStatic>();

                tracer.OnTracesSent += trace =>
                {
                    traceReceived = trace;
                    Interlocked.Increment(ref count);
                };

                //Test
                var instance = _container.Resolve <IClassVoidTest>();
                instance.MethodCall();

                //Verify
                await tracer.FlushAndCompleteAddingAsync().ConfigureAwait(false);
            }

            // un seul retour (avec les deux traces des intercepteurs)
            Assert.AreEqual(1, count);
            Assert.IsNotNull(traceReceived.Single(o => o.Message == "IClassVoidTest_InterceptorTraceInjectTracer"));
            Assert.IsNotNull(traceReceived.Single(o => o.Message == "IClassVoidTest_InterceptorTraceStatic"));
        }