FluentSecurity和Ninject

时间:2013-09-13 14:00:41

标签: ninject ninject.web.mvc fluent-security

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

2 个答案:

答案 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

希望这有帮助