Exemplo n.º 1
0
        public void OperationRaisesFailureTraceEvents()
        {
            var builder = new ContainerBuilder();

            builder.Register <string>(ctxt => throw new InvalidOperationException());

            var container  = builder.Build();
            var mockTracer = Mocks.GetTracer();

            container.SubscribeToDiagnostics(mockTracer);

            var scope = container.Resolve <ILifetimeScope>() as ISharingLifetimeScope;

            var resolveOp = new ResolveOperation(scope, container.DiagnosticSource);

            var raisedEvents = new List <string>();

            var request = new ResolveRequest(new TypedService(typeof(string)), scope.ResolvableImplementationFor <string>(), Enumerable.Empty <Parameter>());

            mockTracer.OperationStarting += (op, req) =>
            {
                raisedEvents.Add("opstart");
                Assert.Equal(resolveOp, op);
                Assert.Equal(request, req);
            };

            mockTracer.RequestStarting += (op, ctxt) =>
            {
                raisedEvents.Add("reqstart");
                Assert.Equal(resolveOp, op);
                Assert.Equal(request.Service, ctxt.Service);
            };

            mockTracer.RequestFailing += (op, ctxt, ex) =>
            {
                raisedEvents.Add("reqfail");
                Assert.Equal(resolveOp, op);
                Assert.IsType <DependencyResolutionException>(ex);
            };

            mockTracer.OperationFailing += (op, ex) =>
            {
                raisedEvents.Add("opfail");
                Assert.IsType <DependencyResolutionException>(ex);
            };

            try
            {
                resolveOp.Execute(request);
            }
            catch
            {
            }

            Assert.Equal(new[] { "opstart", "reqstart", "reqfail", "opfail" }, raisedEvents);
        }
Exemplo n.º 2
0
        public void OperationRaisesSuccessTraceEvents()
        {
            var builder = new ContainerBuilder();

            builder.RegisterInstance("Hello");

            var container  = builder.Build();
            var mockTracer = Mocks.GetTracer();

            container.SubscribeToDiagnostics(mockTracer);

            var scope = container.Resolve <ILifetimeScope>() as ISharingLifetimeScope;

            var resolveOp = new ResolveOperation(scope, container.DiagnosticSource);

            var raisedEvents = new List <string>();

            var request = new ResolveRequest(new TypedService(typeof(string)), scope.ResolvableImplementationFor <string>(), Enumerable.Empty <Parameter>());

            mockTracer.OperationStarting += (op, req) =>
            {
                raisedEvents.Add("opstart");
                Assert.Equal(resolveOp, op);
                Assert.Equal(request, req);
            };

            mockTracer.RequestStarting += (op, ctxt) =>
            {
                raisedEvents.Add("reqstart");
                Assert.Equal(resolveOp, op);
                Assert.Equal(request.Service, ctxt.Service);
            };

            mockTracer.RequestSucceeding += (op, ctxt) =>
            {
                raisedEvents.Add("reqsuccess");
                Assert.Equal(resolveOp, op);
            };

            mockTracer.OperationSucceeding += (op, instance) =>
            {
                raisedEvents.Add("opsuccess");
                Assert.Equal("Hello", instance);
            };

            resolveOp.Execute(request);

            Assert.Equal(new[] { "opstart", "reqstart", "reqsuccess", "opsuccess" }, raisedEvents);
        }
Exemplo n.º 3
0
        /// <inheritdoc />
        public object ResolveComponent(ResolveRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            CheckNotDisposed();

            var operation = new ResolveOperation(this);
            var handler   = ResolveOperationBeginning;

            handler?.Invoke(this, new ResolveOperationBeginningEventArgs(operation));
            return(operation.Execute(request));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Resolve an instance of the provided registration within the context.
        /// </summary>
        /// <param name="registration">The registration.</param>
        /// <param name="parameters">Parameters for the instance.</param>
        /// <returns>
        /// The component instance.
        /// </returns>
        /// <exception cref="Autofac.Core.Registration.ComponentNotRegisteredException"/>
        /// <exception cref="DependencyResolutionException"/>
        public object ResolveComponent(IComponentRegistration registration, IEnumerable <Parameter> parameters)
        {
            if (registration == null)
            {
                throw new ArgumentNullException(nameof(registration));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            CheckNotDisposed();

            var operation = new ResolveOperation(this);
            var handler   = ResolveOperationBeginning;

            handler?.Invoke(this, new ResolveOperationBeginningEventArgs(operation));
            return(operation.Execute(registration, parameters));
        }
Exemplo n.º 5
0
 public object ResolveComponent(IComponentRegistration registration, IEnumerable <Parameter> parameters)
 {
     if (registration == null)
     {
         throw new ArgumentNullException("registration");
     }
     if (parameters == null)
     {
         throw new ArgumentNullException("parameters");
     }
     this.CheckNotDisposed();
     lock (this._synchRoot)
     {
         ResolveOperation resolveOperation = new ResolveOperation(this);
         EventHandler <ResolveOperationBeginningEventArgs> resolveOperationBeginning = this.ResolveOperationBeginning;
         if (resolveOperationBeginning != null)
         {
             resolveOperationBeginning(this, new ResolveOperationBeginningEventArgs(resolveOperation));
         }
         return(resolveOperation.Execute(registration, parameters));
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Resolve an instance of the provided registration within the context.
        /// </summary>
        /// <param name="registration">The registration.</param>
        /// <param name="parameters">Parameters for the instance.</param>
        /// <returns>
        /// The component instance.
        /// </returns>
        /// <exception cref="Autofac.Core.Registration.ComponentNotRegisteredException"/>
        /// <exception cref="DependencyResolutionException"/>
        public object ResolveComponent(IComponentRegistration registration, IEnumerable <Parameter> parameters)
        {
            if (registration == null)
            {
                throw new ArgumentNullException("registration");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            CheckNotDisposed();

            lock (_synchRoot)
            {
                var operation = new ResolveOperation(this);
                var handler   = ResolveOperationBeginning;
                if (handler != null)
                {
                    handler(this, new ResolveOperationBeginningEventArgs(operation));
                }
                return(operation.Execute(registration, parameters));
            }
        }