В проекте MVC, который я создаю, у меня есть следующий RequirePermissionAttribute
, который помещается в любое действие, которое требует определенных разрешений (в этом примере было упрощено):
public class RequirePermissionAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public Operation Permissions { get; set; }
public RequirePermissionAttribute() { }
public RequirePermissionAttribute(Operation permissions)
{
this.Permissions = permissions;
}
public bool AuthorizeCore(HttpContextBase httpContext)
{
IAuthorizationService authServ = new ASPNETAuthorizationService();
return authServ.Authorize(httpContext);
}
public void OnAuthorization(AuthorizationContext filterContext)
{
Enforce.ArgNotNull(filterContext);
if (this.AuthorizeCore(filterContext.HttpContext))
{
// code snipped.
}
else
{
// code snipped.
}
}
}
Таким образом, очевидно, что проблема заключается в том, что мой атрибут authorize имеет зависимость от созданного мной ASPNETAuthorizationService
. Я не могу идти по пути конструктора, так как атрибуты проверяются во время компиляции.
Одна вещь, которую я упоминаю, я использую свой собственный маленький IoC, который я сделал, и у него нет поддержки вложения свойств (пока). Конечно, если бы я пошел по маршруту впрыска имущества, мне пришлось бы добавить поддержку для него (что мне нужно было бы провести некоторое исследование).
Какой лучший способ внести что-то в класс атрибута?