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