【发布时间】:2013-09-13 14:00:41
【问题描述】:
Error activating IntPtr
我正在尝试在 ASP.NET MVC 4 应用程序中使用 Ninject (v.3) 配置 FluentSecurity (v.1.4)。
如果不抛出上述错误,我无法设置ResolveServicesUsing() 配置表达式。
SecurityConfigurator.Configure(
configuration =>
{
configuration.ResolveServicesUsing(
DependencyResolver.Current.GetServices,
DependencyResolver.Current.GetService);
...
我也尝试过为ResolveServicesUsing() 使用另一个重载
configuration.ResolveServicesUsing(
type => DependencyResolver.Current.GetServices(type));
FluentSecurity 需要配置 Ninject 以注入查找我的用户角色的方法以及 PolicyViolationHandler 实现。
更新
我发现我可以省略那些有问题的行,而我的 GetRolesFrom() 实现仍然被称为 (hurrah):
configuration.GetRolesFrom(
() =>
((IPersonManager)DependencyResolver
.Current
.GetService(typeof(IPersonManager)))
.GetCurrentUserRoles());
但是,我仍然无法让我的 PolicyViolationHandler 工作:
public class RequireRolePolicyViolationHandler : IPolicyViolationHandler
{
public ActionResult Handle(PolicyViolationException exception)
{
return new RedirectToRouteResult(
new RouteValueDictionary(
new
{
action = "AccessDenied",
controller = "Home"
}));
}
}
我正在像这样在 NinjectModule 中进行绑定:
public class SecurityModule : NinjectModule
{
public override void Load()
{
this.Kernel.Bind<IPolicyViolationHandler>()
.To<RequireRolePolicyViolationHandler>();
}
}
【问题讨论】:
-
你有没有配置 MVC 的 DependencyResolver 指向 Ninject?我对 Ninject 不熟悉,但通常会在应用启动时调用 DependencyResolver.SetResolver(IDependencyResolver),在其中传入一个包含 Ninject 的方法以解析服务/类型注册的实现。
-
这似乎是因为我可以使用 DependencyResolver 调用另一个方法,但作为检查,我找到了 ninject.web.mvc3 构建的源代码,它看起来就像 System.Web。正在设置 Mvc DependencyResolver:
NinjectMvcHttpApplicationPlugin Start() { DependencyResolver.SetResolver(this.CreateDependencyResolver()); }
标签: ninject ninject.web.mvc fluent-security