2010-11-26 11 views
5

adı için bir denetleyici döndürmedi Bir Alanı bir denetleyicide bir görünüm açmaya çalıştığımda alıyorum. yerine denetleyicisinde, == nullIControllerFactory '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 

Ancak controllerType: Ben bir kesme noktası kodu yerleştirirseniz

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

, ben RequestContext bağlam aşağıdaki değerleri içerir bakın şu şekildedir: Ninject kurulur ad.

yeni sayfaya Bu transfer Girişi sayfada olup

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

tetiklediği. Ancak IE8

içine

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

girerseniz aynı şey aşağıdaki gibi alan kaydı gerçekleşir:

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

kimse NinjectControllerFactory ile çalışan Alanları başardı Has, ya da orada yanlış bir şey olduğunu kurulumumla mı?

cevap

3

Kendi NinjectControllerFactory'nizi oluşturmak yerine, Ninject.Web.Mvc'in en son sürümünü kullanın. Alanları destekler. Bkz. https://github.com/ninject/ninject.web.mvc

+0

Bunu yaparken Ninject'i indirdiğimde şuna baktım ama kullandığım .dll dosyasının derlenmiş versiyonu olduğunu düşündüm. Bu yüzden şimdi bu sürümü indirdim, ancak dokümanlar çok seyrek. Bir şeyleri düzeltmeme yardım edebilecek bir şey varsa? – xiecs

+0

Örnek uygulamaya bir göz atın. Bu kaynak kodu –

+0

kaynak kodu ile birlikte geliyor, indirdim ve Ninject web sitesini başarıyla görüntüledim. Kaynağa baktığımda, istediğimden çok daha karmaşık, Spark, Elmah, Newtonsoft'taki gibi. Birçoğu benim üzerimde. Web sitenizdeki Alanları kullanmadığınızı fark ettim. Ayrıca JavascriptRouteGenerator.cs iyi bir göz vardı. Orada, Alanları ele almayı önerecek hiçbir şey yok gibi görünüyor. Burada listelenemeyecek kadar büyük olan kaynak koduna göre bazı değişiklikler yaptım. İstenen URL'yi bulamadığını söyleyen bir hata mesajı alıyorum. – xiecs