/// <summary>
		/// Initializes a new instance of the <see cref="ExceptionPolicyImpl"/> class with the policy name and a dictionary of policy entries.
		/// </summary>
		/// <param name="policyName">The policy name.</param>
		/// <param name="policyEntries">A set of <see cref="ExceptionPolicyEntry"/> objects.</param>
		public ExceptionPolicyImpl(string policyName, Dictionary<Type, ExceptionPolicyEntry> policyEntries)
		{
			if (policyEntries == null) throw new ArgumentNullException("policyEntries");
			if (string.IsNullOrEmpty(policyName)) throw new ArgumentException(Resources.ExceptionStringNullOrEmpty, "policyEntries");

			this.policyEntries = policyEntries;
			this.instrumentationProvider = new ExceptionHandlingInstrumentationProvider();

			InjectPolicyNameIntoEntries(policyName, policyEntries);
			InjectInstrumentationProviderToEntries(policyEntries);
		}
		private ExceptionPolicyEntry CreatePolicyEntry(IExceptionHandler exceptionHandler, PostHandlingAction postHandlingAction)
		{
			List<IExceptionHandler> handlerList = new List<IExceptionHandler>();
			handlerList.Add(exceptionHandler);
			ExceptionPolicyEntry policyEntry = new ExceptionPolicyEntry(postHandlingAction, handlerList);

			instrumentationProvider = new ExceptionHandlingInstrumentationProvider();
			instrumentationProvider.exceptionHandlingErrorOccurred += new EventHandler<ExceptionHandlingErrorEventArgs>(ErrorCallback);

			policyEntry.SetInstrumentationProvider(instrumentationProvider);

			return policyEntry;
		}
        public void SetUp()
        {
            var handlers = new IExceptionHandler[] { new MockThrowingExceptionHandler() };

            var instrumentationProvider = new ExceptionHandlingInstrumentationProvider(policyName, true, true,
                                                                                          "ApplicationInstanceName");
            var policyEntry = new ExceptionPolicyEntry(typeof(ArgumentException), PostHandlingAction.None, handlers, instrumentationProvider);
            var policyEntries = new Dictionary<Type, ExceptionPolicyEntry>
            {
                {typeof (ArgumentException), policyEntry}
            };

            exceptionPolicy = new ExceptionPolicyImpl(policyName, policyEntries);

            nameFormatter = new FixedPrefixNameFormatter("Prefix - ");
            provider = new ExceptionHandlingInstrumentationProvider(instanceName, true, true, nameFormatter);
            formattedInstanceName = nameFormatter.CreateName(instanceName);
            totalExceptionHandlersExecuted = new EnterpriseLibraryPerformanceCounter(counterCategoryName, TotalExceptionHandlersExecuted, formattedInstanceName);
            totalExceptionsHandled = new EnterpriseLibraryPerformanceCounter(counterCategoryName, TotalExceptionsHandled, formattedInstanceName);
        }
        public void SetUp()
        {
            exceptionHandlerExecutedCallbackCalled = false;
            exceptionHandledCallbackCalled = false;

            List<IExceptionHandler> handlers = new List<IExceptionHandler>();
            handlers.Add(new MockExceptionHandler(new NameValueCollection()));
            policyEntry = new ExceptionPolicyEntry(PostHandlingAction.None, handlers);

            instrumentationProvider = new ExceptionHandlingInstrumentationProvider();
            instrumentationProvider.exceptionHandled += new EventHandler<EventArgs>(ExceptionHandledCallback);
            instrumentationProvider.exceptionHandlerExecuted += new EventHandler<EventArgs>(ExceptionHandlerExecutedCallback) ;

            policyEntry.SetInstrumentationProvider(instrumentationProvider);
        }
		/// <summary>
        /// Attaches an <see cref="ExceptionHandlingInstrumentationProvider"/> to be used for instrumentation on this instance.
		/// </summary>
        /// <param name="provider">The <see cref="ExceptionHandlingInstrumentationProvider"/> that is attached.</param>
		public void SetInstrumentationProvider(ExceptionHandlingInstrumentationProvider provider)
		{
			this.InstrumentationProvider = provider;
		}