public static IDependencyResolver UseCore(
this IDependencyResolver container,
string correlationIdKey = "correlation-id",
LogLevelEnum defaultTraceLoggerMinimumLogLevel = LogLevelEnum.Warning,
IFullyQualifiedName defaultLoggerSource = null)
{
Func<ICorrelationIdProvider> createCorrelationIdProvider;
if (!string.IsNullOrWhiteSpace(correlationIdKey))
{
createCorrelationIdProvider = () => new CallContextCorrelationIdProvider(correlationIdKey);
}
else
{
createCorrelationIdProvider = () => new NullCorrelationIdProvider();
}
return container
.Register<IAsynchronousDelay, AsynchronousDelay>()
.Register<ITimerThreadPoolExecuter, TimerThreadPoolExecuter>()
.Register<ITimerFactory, TimerFactory>()
.Register<IBackoffPolicy, BackoffPolicy>()
.Register<IBackoffPolicyTimingProvider, BackoffPolicyDefaultTimingProvider>()
.Register<IAsynchronousBackoffPolicy, AsynchronousBackoffPolicy>()
.Register<IBackoffPolicyFactory, BackoffPolicyFactory>()
.Register<ILeasedRetry, LeasedRetry>()
.Register<IWaitHandle, ManualResetEventWaitHandle>()
.Register<IApplicationResourceSettingNameProvider, ApplicationResourceSettingNameProvider>()
.Register<IAsyncApplicationResourceSettingProvider, AsyncApplicationResourceSettingProvider>()
.Register<IAsyncApplicationResourceFactory, AsyncApplicationResourceFactory>()
.Register<IApplicationResourceFactory, ApplicationResourceFactory>()
.Register<IApplicationResourceSettingProvider, ApplicationResourceSettingProvider>()
.Register<IQueueFactory, NotSupportedQueueFactory>()
.Register<ILeaseManagerFactory, NotSupportedLeaseManagerFactory>()
.Register<IBlobRepositoryFactory, NotSupportedBlobRepositoryFactory>()
.Register(createCorrelationIdProvider)
.Register<ILoggerFactory>(() => new TraceLoggerFactory(defaultTraceLoggerMinimumLogLevel, defaultLoggerSource))
.Register(() => new TraceLoggerFactory(defaultTraceLoggerMinimumLogLevel, defaultLoggerSource).CreateLogger())
.Register(() => new TraceLoggerFactory(defaultTraceLoggerMinimumLogLevel, defaultLoggerSource).CreateAsynchronousLogger(defaultTraceLoggerMinimumLogLevel))
.Register<IComponentHost, ComponentHost>()
.Register<IEmailQueueDispatcher, EmailQueueDispatcher>()
.Register<IUnitOfWorkFactoryProvider, NotSupportedUnitOfWorkFactoryProvider>()
.Register<IRuntimeEnvironment, DefaultRuntimeEnvironment>()
.Register<IConfiguration>(() => new DefaultConfiguration())
.Register<IAsyncConfiguration>(() => new DefaultAsyncConfiguration())
.Register<IComponentFactory>(() => new ComponentFactory(container))
.Register<IComponentHostRestartHandler, DefaultComponentHostRestartHandler>()
.Register<ILargeMessageQueueFactory, LargeMessageQueueFactory>()
// internal
.Register<ICoreAssemblyLogger>(() =>
new CoreAssemblyLogger(container.Resolve<ILoggerFactory>().CreateLogger(new LoggerSource("AccidentalFish.ApplicationSupport.Core"))));
}
}