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()实现调用(hurray):
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>();
}
}
答案 0 :(得分:1)
激活IntPtr
时出错
不幸的是,你没有发布完整的StackTrace。但是,通常在将Func
注入某个类而没有绑定或使用Factory扩展时会出现此异常。
答案 1 :(得分:0)
我使用Fluent Security和Ninject作为IOC容器。
在Fluent Security配置中,您需要将服务定位器设置为NinjectServiceLocator。
public static void Configure(IKernel kernel)
{
var locator = new NinjectServiceLocator(kernel);
ServiceLocator.SetLocatorProvider(() => locator);
SecurityConfigurator.Configure(
configuration =>
{
configuration.GetAuthenticationStatusFrom(() => HttpContext.Current.User.Identity.IsAuthenticated);
....
}
您可以获取定位器here。
希望这有帮助