private static void RegisterTraceIdGenerator(this AspNetLogServiceCollection serviceImpl)
        {
            serviceImpl.AddDependency(s => s.TryAdd(ServiceDescriptor.Scoped <FallbackTraceIdAccessor, FallbackTraceIdAccessor>()));

            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                serviceImpl.AddDependency(s => s.TryAdd(ServiceDescriptor.Scoped(__traceIdGeneratorFactory)));
                ExpectedTraceIdGeneratorName.Value = nameof(SystemTraceIdGenerator);
            }

            // ReSharper disable once InconsistentNaming
            ILogTraceIdGenerator __traceIdGeneratorFactory(IServiceProvider provider)
            {
                //1. Get traceIdAccessor and fallbackTraceIdAccessor from ServiceProvider
                var traceIdAccessor  = provider.GetService <TraceIdAccessor>();
                var fallbackAccessor = provider.GetRequiredService <FallbackTraceIdAccessor>();

                //2. Create a new instance of SystemTraceIdGenerator
                var generator = new SystemTraceIdGenerator(traceIdAccessor, fallbackAccessor);

                //3. Scoped update
                LogTraceIdGenerator.ScopedUpdate(generator);

                //4. Done, and return.
                return(generator);
            }
        }
Example #2
0
        private static void RegisterTraceIdGenerator(this ContainerBuilder builder)
        {
            builder.RegisterType <FallbackTraceIdAccessor>().As <FallbackTraceIdAccessor>().InstancePerRequest();

            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                builder.Register(__traceIdGeneratorFactory).As <ILogTraceIdGenerator>().InstancePerRequest();
                ExpectedTraceIdGeneratorName.Value = nameof(SystemTraceIdGenerator);
            }

            // ReSharper disable once InconsistentNaming
            ILogTraceIdGenerator __traceIdGeneratorFactory(IComponentContext provider)
            {
                //1. Get traceIdAccessor and fallbackTraceIdAccessor from ServiceProvider
                var traceIdAccessor  = provider.ResolveOptional <TraceIdAccessor>();
                var fallbackAccessor = provider.Resolve <FallbackTraceIdAccessor>();

                //2. Create a new instance of SystemTraceIdGenerator
                var generator = new SystemTraceIdGenerator(traceIdAccessor, fallbackAccessor);

                //3. Scoped update
                LogTraceIdGenerator.ScopedUpdate(generator);

                //4. Done, and return.
                return(generator);
            }
        }
        private static void RegisterTraceIdGenerator(this IContainer ioc)
        {
            ioc.Register <FallbackTraceIdAccessor, FallbackTraceIdAccessor>(ReuseType.Scoped);
            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                ioc.RegisterDelegate(typeof(ILogTraceIdGenerator), () => __traceIdGeneratorFactory(ioc), ReuseType.Scoped);
                ExpectedTraceIdGeneratorName.Value = nameof(SystemTraceIdGenerator);
            }

            ILogTraceIdGenerator __traceIdGeneratorFactory(IContainer provider)
            {
                //1. Get traceIdAccessor and fallbackTraceIdAccessor from ServiceProvider
                var traceIdAccessor  = provider.Resolve <TraceIdAccessor>(IfUnresolved.ReturnDefault);
                var fallbackAccessor = provider.Resolve <FallbackTraceIdAccessor>();

                //2. Create a new instance of SystemTraceIdGenerator
                var generator = new SystemTraceIdGenerator(traceIdAccessor, fallbackAccessor);

                //3. Scoped update
                LogTraceIdGenerator.ScopedUpdate(generator);

                //4. Done, and return.
                return(generator);
            }
        }