什么,你需要做的是让你的CustomAuthorize属性继承Microsoft.Practices.Unity.InterceptionExtension.HandlerAttribute 和 覆盖“ICallHandler CreateHandler(IUnityContainer容器)”方法。
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()
{
}
希望这有助于 干杯 斯廷