1
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() 实现仍然被称为(欢呼):

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>();
    }
}
4

2 回答 2

1

激活 IntPtr 时出错

不幸的是,您还没有发布完整的 StackTrace。Func但通常在没有绑定或使用 Factory 扩展的情况下将 a 注入某个类时会出现此异常。

于 2013-09-17T08:47:08.887 回答
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);

     ....
    }

你可以在这里找到定位器。

希望这可以帮助

于 2013-12-12T14:21:04.517 回答