Asp.net mvc 3 Ninject自定义属性注入不是';行不通

Asp.net mvc 3 Ninject自定义属性注入不是';行不通,asp.net-mvc-3,filter,ninject,authorize-attribute,Asp.net Mvc 3,Filter,Ninject,Authorize Attribute,我遇到了点麻烦,希望有人能指出我哪里出了问题 我一直在使用Ninject向自定义ActionFilterAttributes中注入内容,效果很好: kernel.BindFilter<CriticalErrorAttribute>(FilterScope.Last, 1); 在正常的ActionFilterAttributes中,服务被注入得很好,但在这里不是 任何帮助都将不胜感激您应该实现相应的接口,例如IAuthorizationFilter或IActionFilter,并使用

我遇到了点麻烦,希望有人能指出我哪里出了问题

我一直在使用Ninject向自定义ActionFilterAttributes中注入内容,效果很好:

kernel.BindFilter<CriticalErrorAttribute>(FilterScope.Last, 1);
在正常的ActionFilterAttributes中,服务被注入得很好,但在这里不是


任何帮助都将不胜感激

您应该实现相应的接口,例如
IAuthorizationFilter
IActionFilter
,并使用不同的常规属性来标记要应用该过滤器的控制器或操作

public class AuthorisationFilter : IAuthorizationFilter ....
public class Authorization : Attribute ....

kernel.BindFilter<AuthorisationFilter>(FilterScope.Action, 0)
      .WhenActionMethodHas<Authorisation>()
      .WithPropertyValueFromActionAttribute<Authorisation>("Roles", n => n.Roles)
      .WithPropertyValueFromActionAttribute<Authorisation>("Years", n => n.Years);
公共类授权筛选器:IAAuthorizationFilter。。。。
公共类授权:属性。。。。
kernel.BindFilter(FilterScope.Action,0)
.WhenActionMethodHas()时
.WithPropertyValueFromActionAttribute(“角色”,n=>n.Roles)
.WithPropertyValue fromActionAttribute(“年”,n=>n.Years);

我有一个与已经提出的问题非常相似的问题,但我无法解决它。 我正在添加我的自定义授权过滤器,它在内部可以访问db上下文。dbcontext定义为在RequestScope(NinObject绑定)中使用。当我到达过滤器正在执行的点时,我得到一个错误,dbcontext已经被释放

 void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
{
....
var customerPermissions = _authorizationService.GetCustomersListForPermission(_userProvider.CurrentUser.Username,
                this.PermissionEnums);
..
}
aurhorization服务向db请求当前用户的权限-这意味着Ninject应该创建一个新的dbcontext实例,但这不会发生。。。 我读到“MVC框架自身缓存过滤器”

但是我不知道如何实现我的过滤器绑定

目前,我拥有以下绑定:

kernel.Bind<TDBContext>().ToSelf().InRequestScope();
     kernel.Bind<IUnitOfWork>().To<UnitOfWork>();//.InThreadScope();

            kernel.Bind<IUnitOfWorkManager>().To<UnitOfWorkManager>().InRequestScope();

  #region UserAllCSPermissionBasedAuthFilter
            kernel.BindFilter<UserAllCSPermissionBasedAuthFilter>(FilterScope.Action, 0)
              .WhenActionMethodHas<UserAllCSPermissionBasedAuthFilter>()
              .WithConstructorArgumentFromActionAttribute<UserAllCSPermissionBasedAuthFilter>("permissionEnums", att => att.PermissionEnums);

            kernel.BindFilter<UserAllCSPermissionBasedAuthFilter>(FilterScope.Controller, 0)
               .WhenActionMethodHas<UserAllCSPermissionBasedAuthFilter>()
               .WithConstructorArgumentFromControllerAttribute<UserAllCSPermissionBasedAuthFilter>("permissionEnums", att => att.PermissionEnums);
            #endregion




   [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class UserAllCSPermissionBasedAuthFilter : FilterAttribute, IAuthorizationFilter
    {
        #region Private Fields
        private static readonly ObjectCache _permissionCache = MemoryCache.Default;
        private static readonly ILog _log = LogManager.GetLogger(typeof(UserAllCSPermissionBasedAuthFilter));

        [Inject]
        public  IAuthorizationService _authorizationService { get; set; }/// DependencyResolver.Current.GetService<IAuthorizationService>();
kernel.Bind().ToSelf().InRequestScope();
kernel.Bind().To();/。InThreadScope();
kernel.Bind().To().InRequestScope();
#区域用户AllcPermissionBasedAuthFilter
kernel.BindFilter(FilterScope.Action,0)
.WhenActionMethodHas()时
.WithConstructorArgumentFromActionAttribute(“permissionEnums”,att=>att.permissionEnums);
kernel.BindFilter(FilterScope.Controller,0)
.WhenActionMethodHas()时
.WithConstructorArgumentFromControllerAttribute(“permissionEnums”,att=>att.permissionEnums);
#端区
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited=true,AllowMultiple=false)]
公共类UserAllCSPermissionBasedAuthFilter:FilterAttribute,IAAuthorizationFilter
{
#区域专用字段
私有静态只读对象缓存_permissionCache=MemoryCache.Default;
私有静态只读ILog _log=LogManager.GetLogger(typeof(UserAllCSPermissionBasedAuthFilter));
[注入]
public IAAuthorizationService_authorizationService{get;set;}///DependencyResolver.Current.GetService();
 void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
{
....
var customerPermissions = _authorizationService.GetCustomersListForPermission(_userProvider.CurrentUser.Username,
                this.PermissionEnums);
..
}
kernel.Bind<TDBContext>().ToSelf().InRequestScope();
     kernel.Bind<IUnitOfWork>().To<UnitOfWork>();//.InThreadScope();

            kernel.Bind<IUnitOfWorkManager>().To<UnitOfWorkManager>().InRequestScope();

  #region UserAllCSPermissionBasedAuthFilter
            kernel.BindFilter<UserAllCSPermissionBasedAuthFilter>(FilterScope.Action, 0)
              .WhenActionMethodHas<UserAllCSPermissionBasedAuthFilter>()
              .WithConstructorArgumentFromActionAttribute<UserAllCSPermissionBasedAuthFilter>("permissionEnums", att => att.PermissionEnums);

            kernel.BindFilter<UserAllCSPermissionBasedAuthFilter>(FilterScope.Controller, 0)
               .WhenActionMethodHas<UserAllCSPermissionBasedAuthFilter>()
               .WithConstructorArgumentFromControllerAttribute<UserAllCSPermissionBasedAuthFilter>("permissionEnums", att => att.PermissionEnums);
            #endregion




   [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class UserAllCSPermissionBasedAuthFilter : FilterAttribute, IAuthorizationFilter
    {
        #region Private Fields
        private static readonly ObjectCache _permissionCache = MemoryCache.Default;
        private static readonly ILog _log = LogManager.GetLogger(typeof(UserAllCSPermissionBasedAuthFilter));

        [Inject]
        public  IAuthorizationService _authorizationService { get; set; }/// DependencyResolver.Current.GetService<IAuthorizationService>();