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