Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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));
        }