public void CanDuckTypeMdlc() { var assembly = typeof(Target).Assembly; NLogCommon <Target> .TryGetMdlcProxy( assembly, out var haveProxy, out var isModernMdlcProxy, out var mdlc, out var mdlcLegacy); haveProxy.Should().BeTrue(); if (isModernMdlcProxy) { mdlc.Should().NotBeNull(); mdlc.GetNames().Should().BeEmpty(); } else { mdlcLegacy.LogicalThreadDictionary.Should().BeEmpty(); } var key = "mykey"; var value = "myvalue"; global::NLog.MappedDiagnosticsLogicalContext.Set(key, value); if (isModernMdlcProxy) { var containsKey = mdlc.GetNames().Should().NotBeNull().And.ContainSingle().Subject; mdlc.GetObject(containsKey) .Should() .NotBeNull() .And.Be(value); global::NLog.MappedDiagnosticsLogicalContext.Remove(key); mdlc.GetNames().Should().BeEmpty(); } else { mdlcLegacy.LogicalThreadDictionary.Keys.Cast <string>().Should().ContainSingle(key); mdlcLegacy.LogicalThreadDictionary[key].Should().Be(value); global::NLog.MappedDiagnosticsLogicalContext.Remove(key); mdlcLegacy.LogicalThreadDictionary.Should().BeEmpty(); } }