< Summary

Information
Class: ClientManager.Shared.Messaging.MessageContextAccessor
Assembly: ClientManager.Shared
File(s): /home/runner/work/ClientManagerDemo/ClientManagerDemo/src/ClientManager/ClientManager.Shared/Messaging/MessageContextAccessor.cs
Line coverage
50%
Covered lines: 7
Uncovered lines: 7
Coverable lines: 14
Total lines: 38
Line coverage: 50%
Branch coverage
33%
Covered branches: 2
Total branches: 6
Branch coverage: 33.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
GetOrCreateContext()100%22100%
SetCurrentContext(...)100%210%
SetCausationId(...)0%2040%
get_Current()100%11100%
set_Current(...)100%11100%
ClearContext()100%11100%

File(s)

/home/runner/work/ClientManagerDemo/ClientManagerDemo/src/ClientManager/ClientManager.Shared/Messaging/MessageContextAccessor.cs

#LineLine coverage
 1namespace ClientManager.Shared.Messaging;
 2
 3public class MessageContextAccessor : IMessageContextAccessor
 4{
 15    static readonly AsyncLocal<MessageContext?> _current = new();
 6
 7    public MessageContext GetOrCreateContext()
 8    {
 59        Current ??= new MessageContext(Guid.NewGuid(), null, DateTimeOffset.UtcNow);
 510        return Current;
 11    }
 12
 13    public void SetCurrentContext(MessageContext context)
 14    {
 015        Current = context;
 016    }
 17
 18    public void SetCausationId(Guid messageId)
 19    {
 020        if (messageId == Guid.Empty)
 021            throw new ArgumentNullException(nameof(messageId), "The provided causationId is an Empty Guid");
 22
 023        Current ??= GetOrCreateContext();
 24
 025        Current = new MessageContext(Current.CorrelationId, messageId, Current.Timestamp);
 026    }
 27
 28    public MessageContext? Current
 29    {
 1830        get => _current.Value;
 531        private set => _current.Value = value;
 32    }
 33
 34    public void ClearContext()
 35    {
 436        _current.Value = null;
 437    }
 38}