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