您需要做的是让您的 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);
}
}
在你的统一配置中添加简单的拦截扩展。
unityContainer
.AddNewExtension<Interception>()
.Configure<Interception>()
.SetInterceptorFor<IYourPageInterface>(new InterfaceInterceptor());
将属性添加到您希望执行方面的接口方法中。
[CustomAuthorize]
ActionResult Index()
{
}
希望这会有所帮助
干杯
鲁斯汀