Beispiel #1
0
        public static void Main(string[] args)
        {
            // var cp = CertificateProvider.GetProvider("BouncyCastle");

            // Setup unhandled exception handlers.
            TaskScheduler.UnobservedTaskException      += TaskScheduler_UnobservedTaskException;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            using (var container = new FabricContainer())
            {
                container.AddOptions();
                container.ConfigureSerilogging(logConfiguration =>
                                               logConfiguration.MinimumLevel.Debug()
                                               .Enrich.FromLogContext()
                                               .WriteTo.LiterateConsole(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}{Exception}{NewLine}")
                                               .WriteTo.ApplicationInsightsTraces(Environment.GetEnvironmentVariable("APPLICATION_INSIGHTS"), Serilog.Events.LogEventLevel.Information));



                container.ConfigureApplicationStorage();


                var keyvaultINfo = container.Resolve <KeyVaultSecretManager>();

                container.UseConfiguration(new ConfigurationBuilder()
                                           .AddAzureKeyVault(keyvaultINfo.KeyVaultUrl, keyvaultINfo.Client, keyvaultINfo));



                container.Configure <KeyVaultOptions>("KeyVault");

                container.WithLetsEncryptService(new LetsEncryptServiceOptions
                {
                    BaseUri = Certes.Acme.WellKnownServers.LetsEncryptV2.AbsoluteUri// "https://acme-v01.api.letsencrypt.org"
                });

                container.WithStatelessService <NginxGatewayService>("GatewayServiceType");
                container.WithStatelessService <ApplicationStorageService>("ApplicationStorageServiceType");
                container.WithStatelessService <KeyVaultService>("KeyVaultServiceType");
                container.WithStatelessService <ResourceProviderService>("ResourceProviderServiceType");


                container.WithStatefullService <GatewayManagementService>("GatewayManagementServiceType");


                Thread.Sleep(Timeout.Infinite);
            }
        }
        public void WithoutAspneteCore()
        {
            var container = new FabricContainer();

            container.ConfigureSerilogging(logConfiguration =>
                                           logConfiguration.MinimumLevel.Information()
                                           .Enrich.FromLogContext()
                                           .WriteTo.LiterateConsole(outputTemplate: LiterateLogTemplate));

            var first = container.Resolve <ILoggerFactory>(); //Singleton / containercontrolled lifetime.

            var child = container.CreateChildContainer();

            var second = child.Resolve <ILoggerFactory>();

            Assert.AreEqual(first, second);

            child.Dispose();

            //Debugged, logger factory is not disposed.
        }
        public async Task WithAspNetCore()
        {
            var container = new FabricContainer();

            container.ConfigureSerilogging(logConfiguration =>
                                           logConfiguration.MinimumLevel.Information()
                                           .Enrich.FromLogContext()
                                           .WriteTo.LiterateConsole(outputTemplate: LiterateLogTemplate));



            {
                var child = container.CreateChildContainer();
                child.RegisterType <ILoggerFactory, LoggerFactory>(new ContainerControlledLifetimeManager());

                var childchi = child.CreateChildContainer();
                var first    = childchi.Resolve <ILoggerFactory>(); //Singleton / containercontrolled lifetime.

                var second = child.Resolve <ILoggerFactory>();



                Assert.AreEqual(first, second);



                // But IloggerFactory is not disposed at this point.



                var builder = new WebHostBuilder()
                              .UseKestrel()
                              .ConfigureServices((b, s) =>
                {
                    s.AddSingleton(child);
                })
                              .UseUnityServiceProvider(child)
                              .UseStartup <TestStartup>()
                              .UseContentRoot(Directory.GetCurrentDirectory()).Build();



                //But when we dispose this, then ilogger factory will also get disposed. Why here but not above.
                (builder.Services as IDisposable).Dispose();


                //ILoggerFactory is now disposed.
            }


            {
                var child = container.CreateChildContainer();

                //Ilogger factory is the same, and therefore disposed and now this will fail.

                var builder = new WebHostBuilder()
                              .UseKestrel()
                              .ConfigureServices((b, s) =>
                {
                    s.AddSingleton(child);
                })
                              .UseUnityServiceProvider(child)
                              .UseStartup <TestStartup>()
                              .UseContentRoot(Directory.GetCurrentDirectory()).Build();

                builder.Dispose();
            }
        }