Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/aspnetwebstack.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraghuramn <ranadimi@microsoft.com>2012-03-24 04:42:09 +0400
committerraghuramn <ranadimi@microsoft.com>2012-03-28 23:19:58 +0400
commit51e5f9c0742fabd8c4846164d9c13db975532654 (patch)
tree904fd9dc0439ccda3adc60fd4bc7370b83d189be /src/System.Web.Http
parent71e07a5044a39930ce60af4e8f1f76e8c59b83e1 (diff)
add Release method to IHttpControllerActivator
Diffstat (limited to 'src/System.Web.Http')
-rw-r--r--src/System.Web.Http/Controllers/HttpControllerDescriptor.cs7
-rw-r--r--src/System.Web.Http/Dispatcher/DefaultHttpControllerActivator.cs14
-rw-r--r--src/System.Web.Http/Dispatcher/IHttpControllerActivator.cs2
-rw-r--r--src/System.Web.Http/Tracing/Tracers/HttpControllerActivatorTracer.cs21
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);
+ }
}
}