private bool _disposedValue = false; // To detect redundant calls

        #endregion Fields

        #region Constructors

        public SerilogLoggerScope(SerilogLoggerProvider provider, SerilogLoggerScope parent, string name, object state)
        {
            _provider = provider;
            Name = name;
            State = state;

            Parent = _provider.CurrentScope;
            _provider.CurrentScope = this;
        }
        public SerilogLoggerScope(SerilogLoggerProvider provider, string name, object state)
        {
            _provider = provider;
            Name      = name;
            State     = state;

            Parent = _provider.CurrentScope;
            _provider.CurrentScope = this;
        }
        public SerilogLogger(
            SerilogLoggerProvider provider,
            ILogger logger = null,
            string name = null)
        {
            if (provider == null) throw new ArgumentNullException(nameof(provider));
            _provider = provider;
            _name = name;
            _logger = logger;

            // If a logger was passed, the provider has already added itself as an enricher
            _logger = _logger ?? Serilog.Log.Logger.ForContext(new[] { provider });

            if (_name != null)
            {
                _logger = _logger.ForContext(Constants.SourceContextPropertyName, name);
            }
        }
        public SerilogLogger(
            SerilogLoggerProvider provider,
            ILogger logger = null,
            string name    = null)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }
            _provider = provider;
            _name     = name;
            _logger   = logger;

            // If a logger was passed, the provider has already added itself as an enricher
            _logger = _logger ?? Serilog.Log.Logger.ForContext(new[] { provider });

            if (_name != null)
            {
                _logger = _logger.ForContext(Constants.SourceContextPropertyName, name);
            }
        }