using Abp.Aspects;
using Abp.Dependency;
using Castle.DynamicProxy;
namespace Abp.Runtime.Validation.Interception
{
///
/// This interceptor is used intercept method calls for classes which's methods must be validated.
///
public class ValidationInterceptor : IInterceptor
{
private readonly IIocResolver _iocResolver;
public ValidationInterceptor(IIocResolver iocResolver)
{
_iocResolver = iocResolver;
}
public void Intercept(IInvocation invocation)
{
if (AbpCrossCuttingConcerns.IsApplied(invocation.InvocationTarget, AbpCrossCuttingConcerns.Validation))
{
invocation.Proceed();
return;
}
using (var validator = _iocResolver.ResolveAsDisposable())
{
validator.Object.Initialize(invocation.MethodInvocationTarget, invocation.Arguments);
validator.Object.Validate();
}
invocation.Proceed();
}
}
}