Внедрение в конструктор возможно в этом сценарии, но вам нужно использовать комбо Атрибут / Фильтр.
Ваша реализация фильтра (например: IAuthorizationFilter) будет использовать Внедрение в конструктор и делать всеработа ...
Ваш атрибут (например, FilterAttribute) будет тонким, в основном используется для украшения ваших контроллеров или действий.
public class AuthorizationFilter : IAuthorizationFilter
{
private readonly IAuthorizationService _authorizationService;
private readonly UserRoles _requiredRoles; // Enum of Roles
public AuthorizationFilter(IAuthorizationService authorizationService, UserRoles requiredRoles)
{
_authorizationService = authorizationService;
_requiredRoles = requiredRoles;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
// do work, or HandleUnauthorizedRequest()
}
protected void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
// do work
}
}
public class RequireRolesAttribute : FilterAttribute
{
public readonly UserRoles RequiredRoles;
public RequireRolesAttribute(UserRoles requiredRoles)
{
RequiredRoles = requiredRoles;
}
}
Затем ваш контейнер Ninject связывает атрибут сФильтр:
// controller-level
kernel.BindFilter<AuthorizationFilter>(FilterScope.Controller, 0).WhenControllerHas<RequireRolesAttribute>()
// action level
kernel.BindFilter<AuthorizationFilter>(FilterScope.Action, 0).WhenActionMethodHas<RequireRolesAttribute>();
См .:
Внедрение зависимостей с атрибутом Ninject и Filter для asp.net mvc
Атрибут привязки NinjectФильтр с аргументами конструктора
https://github.com/ninject/ninject.web.mvc/wiki/Filter-configurations
Уловка, которую я хочу преодолеть, заключается в том, как определить мои роли в атрибуте фильтра ... вспомогательная документация должна помочьно я еще не там.
Удачи.