public override IHttpController CreateController(HttpRequestMessage request)
        {
            IHttpController controller = null;

            _traceWriter.TraceBeginEnd(
                request,
                TraceCategories.ControllersCategory,
                TraceLevel.Info,
                _innerDescriptor.GetType().Name,
                CreateControllerMethodName,
                beginTrace: null,
                execute: () =>
            {
                controller = _innerDescriptor.CreateController(request);
            },
                endTrace: (tr) =>
            {
                tr.Message = controller == null
                                        ? SRResources.TraceNoneObjectMessage
                                        : HttpControllerTracer.ActualControllerType(controller).FullName;
            },
                errorTrace: null);

            if (controller != null && !(controller is HttpControllerTracer))
            {
                return(new HttpControllerTracer(request, controller, _traceWriter));
            }

            return(controller);
        }
 void IHttpControllerFactory.ReleaseController(HttpControllerContext controllerContext, IHttpController controller)
 {
     _traceWriter.TraceBeginEnd(
         controllerContext.Request,
         TraceCategories.ControllersCategory,
         TraceLevel.Info,
         _innerFactory.GetType().Name,
         ReleaseControllerMethodName,
         beginTrace: (tr) =>
     {
         tr.Message = HttpControllerTracer.ActualControllerType(controller).FullName;
     },
         execute: () =>
     {
         IHttpController actualController = HttpControllerTracer.ActualController(controller);
         _innerFactory.ReleaseController(controllerContext, actualController);
     },
         endTrace: null,
         errorTrace: null);
 }
        IHttpController IHttpControllerFactory.CreateController(HttpControllerContext controllerContext, string controllerName)
        {
            IHttpController controller = null;

            _traceWriter.TraceBeginEnd(
                controllerContext.Request,
                TraceCategories.ControllersCategory,
                TraceLevel.Info,
                _innerFactory.GetType().Name,
                CreateControllerMethodName,
                beginTrace: (tr) =>
            {
                tr.Message = Error.Format(
                    SRResources.TraceControllerNameAndRouteMessage,
                    controllerName,
                    FormattingUtilities.RouteToString(controllerContext.RouteData));
            },
                execute: () =>
            {
                controller = _innerFactory.CreateController(controllerContext, controllerName);
            },
                endTrace: (tr) =>
            {
                tr.Message = controller == null
                                        ? SRResources.TraceNoneObjectMessage
                                        : HttpControllerTracer.ActualControllerType(controller).FullName;
            },
                errorTrace: null);

            if (controller != null && !(controller is HttpControllerTracer))
            {
                controller = new HttpControllerTracer(controller, _traceWriter);
            }

            return(controller);
        }