コード例 #1
0
        /// <summary>
        /// Creata a new <see cref="MessageContext"/> from
        /// an existing set of entities.
        /// </summary>
        /// <param name="name">
        /// The message name. This cannot be null, empty or whitespace.
        /// </param>
        /// <param name="contextType">
        /// Whether this is a new or attached context.
        /// </param>
        /// <param name="behavior">
        /// (Optional) Modifications to the default behavior of <see cref="MessageContext"/>.
        /// </param>
        /// <param name="disposeAction">
        /// (Optional) Callback to invoke on disposal.
        /// </param>
        /// <exception cref="ArgumentException">
        /// <paramref name="contextType"/> is unknown or invalid.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="name"/> cannot be null, empty or whitespace.
        /// </exception>
        internal MessageContext(string name, ContextType contextType, MessageContextBehavior behavior = MessageContextBehavior.Default, Action <MessageContext> disposeAction = null)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(name);
            }

            Name        = name;
            ContextType = contextType;
            SlotName    = SlotNamePrefix + name;

            if (contextType == ContextType.New)
            {
                _entry = new MessageContextEntry(behavior);
                ContextHelper <MessageContextEntry> .PushContextData(SlotName, _entry);
            }
            else if (contextType == ContextType.Attached)
            {
                ContextHelper <MessageContextEntry> .GetContextDataStack(SlotName).TryPeek(out _entry);
            }
            else if (contextType == ContextType.Detached)
            {
                _entry = new MessageContextEntry(behavior);
            }
            else
            {
                throw new ArgumentException(string.Format("Unknown contextType '{0}'", contextType), "contextType");
            }

            _disposeAction = disposeAction;
        }
コード例 #2
0
        /// <summary>
        /// Get the current (top most) cache context if the context exists or a
        /// detached context otherwise.
        /// </summary>
        /// <param name="name">
        /// The name of this message. This cannot be null, empty or whitespace.
        /// </param>
        /// <param name="behavior">
        /// (Optional) Modifications to the default behavior of <see cref="MessageContext"/>.
        /// This is ignored for an existing message context.
        /// </param>
        /// <returns>
        /// The current <see cref="CacheContext"/>.
        /// </returns>
        /// <exception cref="InvalidOperationException">
        /// There is no current cache context.
        /// </exception>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="name"/> cannot be null, empty or whitespace.
        /// </exception>
        /// <seealso cref="IsSet"/>
        public static MessageContext GetContext(string name, MessageContextBehavior behavior = MessageContextBehavior.Default)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(name);
            }

            return(new MessageContext(
                       name,
                       IsSet(name) ? ContextType.Attached : ContextType.Detached,
                       behavior));
        }
コード例 #3
0
        public void Test_DisposeAction(MessageContextBehavior behavior)
        {
            const string            testName  = "a";
            bool                    wasCalled = false;
            Action <MessageContext> callback  = (ctx) =>
            {
                Assert.That(ctx, Is.Not.Null);
                wasCalled = true;
            };

            using (MessageContext messageContext = new MessageContext(testName, MessageContextBehavior.Capturing, callback))
            {
            }
            Assert.That(wasCalled, Is.True);
        }
コード例 #4
0
 /// <summary>
 /// Create a new <see cref="MessageContext"/>.
 /// </summary>
 /// <param name="name">
 /// The message name. This cannot be null, empty or whitespace.
 /// </param>
 /// <param name="behavior">
 /// (Optional) Modifications to the default behavior of <see cref="MessageContext"/>.
 /// </param>
 /// <param name="disposeAction">
 /// (Optional) Callback to invoke on disposal.
 /// </param>
 public MessageContext(string name, MessageContextBehavior behavior = MessageContextBehavior.Default, Action <MessageContext> disposeAction = null)
     : this(name, ContextType.New, behavior, disposeAction)
 {
     // Do nothing
 }
コード例 #5
0
 /// <summary>
 /// Create a new <see cref="MessageContext"/>.
 /// </summary>
 /// <param name="behavior">
 /// Modifications to the default behavior of <see cref="MessageContextEntry"/>.
 /// </param>
 public MessageContextEntry(MessageContextBehavior behavior = MessageContextBehavior.Default)
 {
     Message  = (behavior & MessageContextBehavior.Capturing) == MessageContextBehavior.Capturing ? new StringBuilder() : null;
     Behavior = behavior;
 }