Asp.net mvc 3 Ninject自定义属性注入不是';行不通
我遇到了点麻烦,希望有人能指出我哪里出了问题 我一直在使用Ninject向自定义ActionFilterAttributes中注入内容,效果很好: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,并使用
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>();