diff options
author | raghuramn <ranadimi@microsoft.com> | 2012-03-24 04:42:09 +0400 |
---|---|---|
committer | raghuramn <ranadimi@microsoft.com> | 2012-03-28 23:19:58 +0400 |
commit | 51e5f9c0742fabd8c4846164d9c13db975532654 (patch) | |
tree | 904fd9dc0439ccda3adc60fd4bc7370b83d189be /src/System.Web.Http | |
parent | 71e07a5044a39930ce60af4e8f1f76e8c59b83e1 (diff) |
add Release method to IHttpControllerActivator
Diffstat (limited to 'src/System.Web.Http')
4 files changed, 39 insertions, 5 deletions
diff --git a/src/System.Web.Http/Controllers/HttpControllerDescriptor.cs b/src/System.Web.Http/Controllers/HttpControllerDescriptor.cs index 2b8ce4c1..9a607048 100644 --- a/src/System.Web.Http/Controllers/HttpControllerDescriptor.cs +++ b/src/System.Web.Http/Controllers/HttpControllerDescriptor.cs @@ -174,11 +174,8 @@ namespace System.Web.Http.Controllers /// <param name="controller">The controller.</param> public virtual void ReleaseController(HttpControllerContext controllerContext, IHttpController controller) { - IDisposable disposable = controller as IDisposable; - if (disposable != null) - { - disposable.Dispose(); - } + // just delegate the work to the activator + HttpControllerActivator.Release(controller, controllerContext); } /// <summary> diff --git a/src/System.Web.Http/Dispatcher/DefaultHttpControllerActivator.cs b/src/System.Web.Http/Dispatcher/DefaultHttpControllerActivator.cs index ee9cb704..43f8168c 100644 --- a/src/System.Web.Http/Dispatcher/DefaultHttpControllerActivator.cs +++ b/src/System.Web.Http/Dispatcher/DefaultHttpControllerActivator.cs @@ -91,5 +91,19 @@ namespace System.Web.Http.Dispatcher throw Error.InvalidOperation(ex, SRResources.DefaultControllerFactory_ErrorCreatingController, controllerType); } } + + /// <summary> + /// Releases the <paramref name="controller"/> instance + /// </summary> + /// <param name="controllerContext">The <see cref="HttpControllerContext"/> containing </param> + /// <param name="controller">The <see cref="IHttpController"/> that is to be released</param> + public void Release(IHttpController controller, HttpControllerContext controllerContext) + { + IDisposable disposable = controller as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + } } } diff --git a/src/System.Web.Http/Dispatcher/IHttpControllerActivator.cs b/src/System.Web.Http/Dispatcher/IHttpControllerActivator.cs index e765b12f..d1b3156a 100644 --- a/src/System.Web.Http/Dispatcher/IHttpControllerActivator.cs +++ b/src/System.Web.Http/Dispatcher/IHttpControllerActivator.cs @@ -9,5 +9,7 @@ namespace System.Web.Http.Dispatcher public interface IHttpControllerActivator { IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType); + + void Release(IHttpController controller, HttpControllerContext controllerContext); } } diff --git a/src/System.Web.Http/Tracing/Tracers/HttpControllerActivatorTracer.cs b/src/System.Web.Http/Tracing/Tracers/HttpControllerActivatorTracer.cs index 3e3341d8..a70141dd 100644 --- a/src/System.Web.Http/Tracing/Tracers/HttpControllerActivatorTracer.cs +++ b/src/System.Web.Http/Tracing/Tracers/HttpControllerActivatorTracer.cs @@ -11,6 +11,7 @@ namespace System.Web.Http.Tracing.Tracers internal class HttpControllerActivatorTracer : IHttpControllerActivator { private const string CreateMethodName = "Create"; + private const string ReleaseMethodName = "Release"; private readonly IHttpControllerActivator _innerActivator; private readonly ITraceWriter _traceWriter; @@ -50,5 +51,25 @@ namespace System.Web.Http.Tracing.Tracers return controller; } + + void IHttpControllerActivator.Release(IHttpController controller, HttpControllerContext controllerContext) + { + _traceWriter.TraceBeginEnd( + controllerContext.Request, + TraceCategories.ControllersCategory, + TraceLevel.Info, + _innerActivator.GetType().Name, + ReleaseMethodName, + beginTrace: (tr) => + { + tr.Message = controller == null ? SRResources.TraceNoneObjectMessage : controller.GetType().FullName; + }, + execute: () => + { + _innerActivator.Release(controller, controllerContext); + }, + endTrace: null, + errorTrace: null); + } } } |