Example #1
0
        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();
            }
        }