2010-11-26 4 views
5

Areaのコントローラでビューを開こうとすると、上記のように表示されます。代わりに、コントローラ上で、== nullのIControllerFactory 'MyWebSite.WebUI.Infrastructure.NinjectControllerFactory'が 'Admin'という名前のコントローラを返しませんでした

context.RouteData.DataTokens.Values[0] = “MyWebSite.WebUI.Areas.Visitor” context.RouteData.DataTokens.Values[1] = “Visitor” which is the Area 
context.RouteData.Values.Values[0] = “admin” which is the Controller 
context.RouteData.Values.Values[1] = “register” which is the View 

しかしcontrollerType:私は、コードにブレークポイントを配置する場合

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel kernel = new StandardKernel(new RLSBCWebSiteServices()); 

    protected override IController GetControllerInstance(RequestContext context, Type controllerType) 
    { 
     if (controllerType == null) 
      return null; 
     return (IController)kernel.Get(controllerType); 
    } 

    private class MyWebSiteServices : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IMatchesRepository>().To<SqlMatchesRepository>().WithConstructorArgument("connectionString", 
       ConfigurationManager.ConnectionStrings["MyWebSiteDb"].ConnectionString); 
     } 
    } 
} 

は、私はRequestContextのコンテキストには、次の値が含まれて参照してください。次のようにNinjectが設定されています名。

新しいページへのこの転送は、ログインページにある

Html.ActionLink("here", "Register", "Admin", new { area = "Visitor" }, null) 

によってトリガされています。しかし、私はIE8

http://example.com/Visitor/admin/register 

を入力すると、同じことが、次のようにエリア登録が行われます

public class VisitorAreaRegistration : AreaRegistration 
{ 
    public override string AreaName { get { return "Visitor"; } } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Visitor_default", 
      "Visitor/{controller}/{action}/{id}", 
      new { controller = "Admin", action = "Register", id = UrlParameter.Optional } 
     ); 
    } 
} 

は、誰もがNinjectControllerFactoryで作業領域を取得するために管理している、またはそこには何か間違っています私のセットアップで?

答えて

3

独自のNinjectControllerFactoryを作成する代わりに、Ninject.Web.Mvcの最新バージョンを使用します。エリアをサポートしています。参照してください:https://github.com/ninject/ninject.web.mvc

+0

私は最初にNinjectをダウンロードしたときこれを見ましたが、私が使用した.dllはこれのコンパイルされたバージョンだと思いました。だから、私は今このバージョンをダウンロードしましたが、ドキュメントは非常にまばらです。物事を設定するのに役立つと提案できるものがあれば? – xiecs

+0

サンプルアプリケーションを見てください。それはソースコード –

+0

に付属しています。ソースをダウンロードしてインストールし、NinjectのWebサイトを正常に表示しました。ソースを見れば、Spark、Elmah、Newtonsoftなどと比べてはるかに複雑です。その多くは私の上です。私はあなたのウェブサイトでエリアを使用しないことに気付きます。 JavascriptRouteGenerator.csもよく見ました。そこには、それがエリアを扱うことを示唆する何もないようです。私はソースコードに基づいていくつか変更を加えましたが、これはあまりにも大きいのでここにリストアップすることはできません。リクエストされたURLが見つからないというエラーメッセージが表示されます。 – xiecs

関連する問題