1

我使用安裝在App_Start文件夾中的標準NinjectMVC3引導程序。使用Ninject和全局過濾器的依賴注入:IAuthorizationFilter

我的應用程序類的樣子:

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競價規則:

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。

但我的代碼dosn't工作。謝謝。

回答

4

從代碼中不太清楚哪裏更具體地配置內核。這應該在RegisterServices方法~/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模塊,你會進口在這個方法:

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

,你所定義的自定義模塊:

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

是的,我解放軍在RegisterServices中綁定綁定規則。但它不起作用。 – 2012-01-31 12:22:44

+1

@JeanLouis,我剛剛測試過這段代碼,它工作得很好。步驟:1.創建一個新的ASP.NET MVC 3應用程序。 2.安裝Ninject.MVC3 NuGet包。 3.定義'IAccountsRepository','AccountsRepository'和'GlobalAuthFilter'類型。 4.將我在答案中顯示的代碼放入RegisterServices方法中。 5.運行應用程序。 6.執行OnAuthorization。 – 2012-01-31 12:26:29

+0

我已經更新了我的答案,以說明Ninject模塊的示例。 – 2012-01-31 12:28:23

相關問題