Что вам нужно сделать, это заставить свой атрибут CustomAuthorize наследовать от Microsoft.Practices.Unity.InterceptionExtension.HandlerAttribute и переопределить метод «ICallHandler CreateHandler (IUnityContainer container)».
public class CustomAuthorizeAttribute: HandlerAttribute
{
public IAuthorizeAttributeHandler AuthorizationHandler { get; set; }
public override ICallHandler CreateHandler(IUnityContainer container)
{
AuthorizationHandler= new AuthorizationAttributeHandler
{
DBContext = container.Resolve<IDBContext>()
};
return AuthorizationHandler;
}
}
Теперь создайтепроизводный интерфейс от Microsoft.Practices.Unity.InterceptionExtension.ICallHandler и добавьте свой IDBContext в качестве члена.
public interface IAuthorizeAttributeHandler : ICallHandler
{
IDBContext DBContext;
}
Реализация IAuthorizationAttributeHandler
public class AuthorizationAttributeHandler : IAuthorizeAttributeHandler
{
public IDBContext DBContext
{
get; set;
}
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
var result = DBContext.DoWork(input.Arguments..);
//// Invoke the handler
IMethodReturn output = getNext()(input, getNext);
return getNext()(input, getNext);
}
}
В свою конфигурацию Unity добавьте простое расширение перехватывания.
unityContainer
.AddNewExtension<Interception>()
.Configure<Interception>()
.SetInterceptorFor<IYourPageInterface>(new InterfaceInterceptor());
Добавлен атрибут в метод интерфейса, для которого вы хотите, чтобы аспект выполнялся.
[CustomAuthorize]
ActionResult Index()
{
}
Надеюсь, это поможет Cheers Rustin