private void ConfigureLogging(RuntimeConfiguration runtimeConfiguration, ContainerBuilder builder)
        {
            var configuration = new LoggingConfiguration();

            Target loggingTarget;

            if (runtimeConfiguration.GetBool("UseSeq"))
            {
                var seqTarget = new SeqTarget
                {
                    Name       = "Seq",
                    ServerUrl  = "http://localhost:5341",
                    Properties =
                    {
                        new SeqPropertyItem
                        {
                            Name  = "MachineName",
                            Value = "localhost",
                        },
                        new SeqPropertyItem
                        {
                            Name  = "hostname",
                            Value = "${hostname}",
                        },
                        new SeqPropertyItem
                        {
                            Name  = "source",
                            Value = "${callsite:fileName=true}",
                        }
                    },
                };

                loggingTarget = new BufferingTargetWrapper
                {
                    Name          = "buffer",
                    BufferSize    = 1000,
                    FlushTimeout  = 2500,
                    WrappedTarget = seqTarget
                };
            }
            else
            {
                loggingTarget = new ApplicationInsightsTarget()
                {
                    Name = "ApplicationInsights"
                };
            }

            configuration.AddTarget(loggingTarget);

            configuration.AddRule(LogLevel.Warn, LogLevel.Fatal, loggingTarget, "Microsoft.*", true);
            configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, loggingTarget, "*", true);

            LogManager.Configuration = configuration;
            builder.RegisterGeneric(typeof(Logger <>)).As(typeof(ILogger <>));
            builder.RegisterType <NLogLoggerFactory>().AsImplementedInterfaces().InstancePerLifetimeScope();
        }
        public DiConfig(string functionName)
        {
            DependencyInjection.Initialize((builder) =>
            {
                var runtimeConfiguration = new RuntimeConfiguration();
                builder.RegisterInstance(runtimeConfiguration).As <IRuntimeConfiguration>().SingleInstance();

                ConfigureLogging(runtimeConfiguration, builder);
                ConfigureMonitoring(builder);

                builder.RegisterType <RedisDatabaseFactory>().As <IRedisDatabaseFactory>().SingleInstance();
                builder.RegisterType <SqlConnectionFactory>().As <ISqlConnectionFactory>().SingleInstance();

                builder.RegisterType <CleanUpService>().As <ICleanUpService>().InstancePerLifetimeScope();
                builder.RegisterType <LoadGeneratorService>().As <ILoadGeneratorService>().InstancePerLifetimeScope();
                builder.RegisterType <AddAliasService>().As <IAddAliasSerivce>().InstancePerLifetimeScope();
                builder.RegisterType <GetAliasService>().As <IGetAliasService>().InstancePerLifetimeScope();
            }, functionName);
        }