As mentioned in my previous post, Unity can be used to address cross cutting concerns by registering and invoking interceptors. In this post, I’ll show how to create an Exception handler for the enterprise library exception block using unity to reduce the cross concerns in your code for exception handling.
Step 1: Create ICallHanlder implementation
public class ExceptionCallHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
var __Result = getNext()(input, getNext);
if (__Result.Exception == null)
return __Result;
var __Rethrow = ExceptionPolicy.HandleException(__Result.Exception, "MyExceptionPolicy");
if (__Rethrow) throw __Result.Exception;
else throw new ArgumentException("An exception occured");
}
public int Order { get; set; }
}
Step 2: Create an attribute for Exception Handling
public class ExceptionCallHandlerAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(Microsoft.Practices.Unity.IUnityContainer container)
{
return new ExceptionCallHandler();
}
}
Step 3: Use the handler attribute in your code.
[ExceptionCallHandler]
void Update(T instance);
Step 4: Configure the container
IUnityContainer ___Container = new UnityContainer();
___Container.AddNewExtension<Interception>();
___Container.RegisterType<IRepository<Employee, Guid>, EmployeeRepository>();
___Container.Configure<Interception>().SetDefaultInterceptorFor<IRepository<Employee, Guid>>(new TransparentProxyInterceptor());
It’s that simple to remove the try catch blocks from your code!!!
2 comments:
hi,
First of all. Thanks very much for your useful post.
I just came across your blog and wanted to drop you a note telling you how impressed I
was with the information you have posted here.
Please let me introduce you some info related to this post and I hope that it is useful
for .Net community.
There is a good C# resource site, Have alook
http://www.csharptalk.com
simi
Thanks, its helpful. How can we avoid adding the Attribute to the Individual classes. Please provide syntax.
Post a Comment