2011-04-12 4 views
4

現在、私は依存関係注入をセットアップし、認証属性を無効にしようとしています。私はいくつかの例に従おうとしましたが、私はいつもエラーがあるようです。ASP.NET MVC3 IAuthorisationfilter Ninject依存関係

Global.asaxの

public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication 
{ 
    private class MyModule : NinjectModule 
    { 
     public override void Load() 
     { 
      this.BindFilter<SageAdminAuthorizationFilter>(FilterScope.Controller, 0); 
      Bind<IAuthentication>().To<CustomAuthenticationService>(); 
     } 
    } 

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

    protected override void OnApplicationStarted() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 

    protected override IKernel CreateKernel() 
    { 
     var modules = new INinjectModule[] { 
     new MyModule() 
    }; 
     var kernel = new StandardKernel(modules); 

     return kernel; 
    } 
} 

認証フィルタ

public class CustomAuthenticationService : IAuthentication 
{ 
    public void SignIn(string claimedIdentifier, bool createPersistentCookie) 
    { 
     //Write Sign in code here 
     FormsAuthentication.SetAuthCookie(claimedIdentifier, createPersistentCookie); 
    } 

    public void SignOut() 
    { 
     FormsAuthentication.SignOut(); 
    } 

    public bool Authorize(HttpContextBase httpContext) 
    { 
     //Check here if the user can administer the admin 
     return false; 
    } 
} 

//The Authorization attribute on a controller 
public class CustomAdminAuthorizationFilter : IAuthorizationFilter 
{ 
    private readonly IAuthentication _authentication; 

    public SageAdminAuthorizationFilter(IAuthentication authentication) 
    { 
     _authentication = authentication; 
    } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     _authentication.Authorize(filterContext.HttpContext); 
    } 
} 

私はいつも

シーケンスに要素が含まれていない受信。

助けてください。

更新: 私はまだ同じエラーが発生しています。 ':プロジェクト\ Ninject \ \ ninject.web.mvc \ mvc3 \ SRC \ Ninject.Web.Mvc \ NinjectHttpApplication.cs C' のソースの検索

は、次のように

コールスタックがあります。チェックサム:MD5 {3d e3 7f 86 44 70 db 0 3c 6f e0 97 fb 1e 12 13} ファイル 'c:\ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectHttpApplication。 cs 'は存在しません。 スクリプトドキュメントで 'c:\ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectHttpApplication.cs'を探しています... 'c:\ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectHttpApplication.cs 'と入力します。 ファイルがプロジェクト内に見つかりませんでした。 ディレクトリ 'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ crt \ src \'にあります。 ディレクトリ 'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ src \ mfc \ '... ディレクトリ' C:¥Program Files(x86)¥Microsoft Visual Studio 10.0¥VC¥atlmfc¥src¥atl¥ '... ディレクトリ' C:\ Programファイル(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ '... アクティブソリューションのデバッグソースファイル設定は、デバッガがユーザーにファイルの検索を要求しないことを示します。c:\ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectHttpApplication.cs。 デバッガは、ソースファイル 'c:¥Projects¥Ninject¥ninject.web.mvc¥mvc3¥src¥Ninject.Web.Mvc¥NinjectHttpApplication.cs'を見つけることができませんでした。

NugetからNinjectとNinject.MVC3をインストールしました。それはデバッグするファイルを見つけることを試みているように見えます。なぜこのようなことが起こっているのか誰にでも私に何か情報を伝えることはできますか?

Iも

このエラーが発生した

[例外InvalidOperationExceptionは:シーケンスに要素が含まれていない] System.Linq.Enumerable.Single Cにおける(IEnumerableを1 source) +320 Ninject.Web.Mvc.Bootstrapper.Initialize(Func 1 createKernelCallback):プロジェクト\ \ Ninject \ ninject.web.mvc \ mvc3 \ Ninject.Web.Mvc \ Bootstrapper.cs:67 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start()(c:\ Projects \ Ninject \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ NinjectHttpApplication.cs:65

+0

申し訳dependecyリゾルバはありません赤いニシン。それは他の人々の例に従うことを試みることから残された。 –

答えて

2

アクションフィルターは、次の構文を使用して登録する必要があります。

public override void Load() 
{ 
    BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0); 
    Bind<IAuthentication>().To<CustomAuthenticationService>(); 
} 

apply the filter conditionallyでもかまいません。

備考:あなたの質問に表示されているNinjectDependencyResolverクラスとの関係はありません。これはすでにninject.mvc3に組み込まれているため、手動で作成するべきではありません。解決

+0

こんにちはダーリン、私は同じエラーが発生しているが、それは動作するように見える非常にありがとうございます。私はいくつかのテストを行います、呼び出しスタックは、ninjectソースコードを検索しようとしています。私は調査して、これが私の問題を解決したかどうかを確認します。 –