我有一种情况需要在动作过滤器中注入一些依赖项,即我的自定义授权属性中的自定义授权提供程序.我偶然发现了许多人和帖子,他们说我们应该将"属性元数据"与"行为"分开.这是有道理的,而且还有一个事实是过滤器属性没有通过'DependencyResolver'实例化,因此很难注入依赖项.
所以我对我的代码进行了一些重构,我想知道我是否正确(我使用Castle Windsor作为DI框架).
首先,我剥离了我的属性,只包含我需要的原始数据
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : Attribute
{
public string Code { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个自定义授权过滤器,其中包含确定当前用户是否具有适当授权的逻辑
public class MyAuthorizationFilter : IAuthorizationFilter
{
private IAuthorizationProvider _authorizationProvider;
private string _code;
public MyAuthorizationFilter(IAuthorizationProvider authorizationProvider, string code)
{
Contract.Requires(authorizationProvider != null);
Contract.Requires(!string.IsNullOrWhiteSpace(code));
_authorizationProvider = authorizationProvider;
_code = code;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.HttpContext.Request.IsAuthenticated)
{
BaseController controller = filterContext.Controller as BaseController;
if (controller != null)
{
if …Run Code Online (Sandbox Code Playgroud)