/// <summary> /// Append a new tracer using its type /// </summary> public static void Append(Type tracerType) { //Validazione argomenti if (tracerType == null) { throw new ArgumentNullException(nameof(tracerType)); } //Eseguo la generazione del tipo del tracer object value = Activator.CreateInstance(tracerType); ITracer instance = value as ITracer; //Se l'oggetto è nullo, emetto eccezione if (instance == null) { throw new NullReferenceException("Unable to generate a valid " + $"instance of type '{tracerType.FullName}' that implements interface '{typeof(ITracer).FullName}'."); } //Ricerco un tracer dello stesso tipo nella lista ITracer duplicateTracer = _Tracers.SingleOrDefault(t => t.GetType() == instance.GetType()); //Se già esiste un tracer dello stesso tipo, emetto eccezione if (duplicateTracer != null) { throw new InvalidProgramException("Found " + $"another tracer of the same type of '{tracerType.FullName}'."); } //Aggiungo il tracer alla lista _Tracers.Add(instance); }
private static bool HasDifferentTracer(ITracer currentTracer, object newTracer) { if (currentTracer == null) { return(false); } if (currentTracer is ExternalTracerAdapter adapted) { return(adapted.Tracer.GetType().Name != newTracer.GetType().Name); } return(currentTracer.GetType().Name != newTracer.GetType().Name); }
private void Run(ITracer tracer, long repeat) { var e = new ManualResetEventSlim(); var watch = Stopwatch.StartNew(); for (int i = 1; i <= repeat; i++) { var current = i; Task.Factory.StartNew(() => { tracer.Info(Guid.NewGuid()); if (current == repeat) e.Set(); }); } e.Wait(); Console.WriteLine("{0}: {1}", tracer.GetType().Name, watch.ElapsedTicks / repeat); }
/// <summary> /// <para>Configures the global default <see cref="ITracer"/> with given instance, which will be returned by all subsequent <see cref="Get"/> calls.</para> /// <para>By default, this method fails when trying to overwrite a previously configured instance. This behaviour can be changed with <paramref name="canOverwrite"/> parameter.</para> /// </summary> /// <exception cref="ArgumentNullException">Provided instance was <c>null</c>.</exception> /// <exception cref="InvalidOperationException">Attempted to overwrite previously configured instance.</exception> public static void Configure([NotNull] ITracer tracer, bool canOverwrite = false) { if (!canOverwrite && instance != null) { throw new InvalidOperationException($"Can't overwrite existing configured implementation of type '{instance.GetType().Name}'."); } instance = tracer ?? throw new ArgumentNullException(nameof(tracer)); }