По пути можно использовать инъекцию свойства и украсить свойство атрибутом [Inject]
:
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
[Inject]
public IUserService UserService { get; set; }
private string[] roles;
...
}
Инъекция в конструктор плохо работает с атрибутами, поскольку вы больше не сможете декорироватьконтроллеры / действия с ними.Вы можете использовать только конструктор с синтаксисом привязки фильтра в NInject:
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
private readonly IUserService userService;
private string[] roles;
public AuthorizeAttribute(IUserService userService, params string[] roles)
{
this.userService = userService;
this.roles = roles;
}
...
}
, а затем:
internal class SiteModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<IUserService>().To<UserService>();
this.BindFilter<AuthorizeAttribute>(FilterScope.Controller, 0)
.WhenControllerType<AdminController>();
}
}
Метод расширения BindFilter<>
определен в пространстве имен Ninject.Web.Mvc.FilterBindingSyntax
, поэтомуубедитесь, что вы перенесли это в область видимости, прежде чем вызывать его в ядре.