依赖注入与Ninject和全局筛选:个IAuthorizationFilter [英] Dependency Injection with Ninject and Global Filter: IAuthorizationFilter

查看:172
本文介绍了依赖注入与Ninject和全局筛选:个IAuthorizationFilter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用非标准NinjectMVC3引导程序安装在App_Start文件夹中。

I use standart NinjectMVC3 Bootstrapper installed in the App_Start folder.

我的应用程序类是这样的:

My application class looks like:

public class MvcApplication : HttpApplication
{
    static void RegisterRoutes(RouteCollection routes)
    {
        // ... routes here ...
    }

    public void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // empty
    }
}

我只按照NinjectMVC3临时用户竞价规则:

I have only following bidding rules registed in NinjectMVC3:

Bind<IAccountsRepository>().To<AccountsRepository>();
this.BindFilter<GlobalAuthFilter>(FilterScope.Global, 0);

和我的全局过滤器:

public class GlobalAuthFilter : IAuthorizationFilter
{
    readonly IAccountsRepository _accountsRepository;

    public GlobalAuthFilter(IAccountsRepository accountsRepository)
    {
        _accountsRepository = accountsRepository;
    }

    public void OnAuthorization(AuthorizationContext context)
    {
        // Code here never reached. Why? What's wrong?
    }
}

有我的应用程序的任何控制器。我想援引OnAuthorization每一个行动的呼吁每一个控制器。

There are any controllers in my application. And I want to invoke OnAuthorization for every action calls for every controllers.

但我的code不到风度工作。谢谢你。

But my code dosn't work. Thanks.

推荐答案

这不是很从code不清楚的地方更具体的在配置内核。这应该做的 RegisterServices 的方法〜/ App_Start / NinjectMVC3.cs

It's not quite clear from your code where more specifically are you configuring your kernel. This should be done in the RegisterServices method of ~/App_Start/NinjectMVC3.cs:

/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IAccountsRepository>().To<AccountsRepository>();
    kernel.BindFilter<GlobalAuthFilter>(FilterScope.Global, 0);
}        

在安装 Ninject.MVC3 的NuGet包这种方法的身体会是空的,这是你应该直接配置的依存关系或定义Ninject模块,你会进口在此方法:

When you install the Ninject.MVC3 NuGet package the body of this method will be empty and it is where you should either directly configure dependencies or define Ninject modules that you would import in this method:

/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
    kernel.Load(new MyModule());
}        

您在其中定义自定义模块:

where you have defined the custom module:

public class MyModule : NinjectModule
{
    public override void Load()
    {
        this.Bind<IAccountsRepository>().To<AccountsRepository>();
        this.BindFilter<GlobalAuthFilter>(FilterScope.Global, 0);
    }
}

这篇关于依赖注入与Ninject和全局筛选:个IAuthorizationFilter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆