using System; using Autofac; using Serilog; namespace MfGames.TestSetup { /// /// A context for the test run that includes the container. /// public class TestContext : IDisposable { private IContainer? container; private ILogger? logger; public IContainer Container { get => this.container ?? throw new NullReferenceException( "ConfigureContainer has not been called."); private set => this.container = value; } public ILogger Logger { get => this.logger ?? throw new NullReferenceException( "SetLogger has not been called."); private set => this.logger = value; } public void ConfigureContainer() { var builder = new ContainerBuilder(); builder .RegisterInstance(this.Logger) .As() .SingleInstance(); this.ConfigureContainer(builder); this.Container = builder.Build(); } /// public void Dispose() { this.container?.Dispose(); } public TType Resolve() where TType : class { return this.Container.Resolve(); } public void SetLogger(ILogger value) { this.Logger = value; } protected virtual void ConfigureContainer(ContainerBuilder builder) { } } }