2010-03-18 32 views
6

Tôi đã cập nhật dự án cho VS2010 và MVC2 từ VS2008 và MVC1. Tôi đang gặp vấn đề với Ninject không tìm thấy điều khiển trong phạm vi khu vựcNinject 2 và MVC 2.0

Đây là global.asax.cs tập tin của tôi:

namespace Website 
{ 
// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
// visit http://go.microsoft.com/?LinkId=9394801 

public class MvcApplication : NinjectHttpApplication 
{ 
    public static StandardKernel NinjectKernel; 

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

     routes.MapRoute(
      "Balance", 
      "Balance/{action}/{month}/{year}", 
      new { controller = "Balance", action = "Index", month = DateTime.Now.Month, year = DateTime.Now.Year } 
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Login", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

    /* 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 

     // initializes the NHProfiler so you can see what is going on with your queries 
     HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize(); 
    } 
    */ 

    protected override void OnApplicationStarted() 
    { 
     RegisterRoutes(RouteTable.Routes); 
     AreaRegistration.RegisterAllAreas(); 
     RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    } 

    protected void Application_Error(object sender, EventArgs e) 
    { 
     var errorService = NinjectKernel.Get<IErrorLogService>(); 
     errorService.LogError(HttpContext.Current.Server.GetLastError().GetBaseException(), "AppSite"); 
    } 

    protected override IKernel CreateKernel() 
    { 
     if (NinjectKernel == null) 
     { 
      NinjectKernel = new StandardKernel(new ServiceModule()); 
     } 

     return NinjectKernel; 
    } 
} 

public class ServiceModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IHelper>().To<Helper>().InRequestScope(); 
     Bind<IErrorLogService>().To<ErrorLogService>(); 

     Bind<INHSessionFactory>().To<NHSessionFactory>().InSingletonScope(); 
     Bind<ISessionFactory>().ToMethod(ctx => 
             ctx.Kernel.Get<INHSessionFactory>().GetSessionFactory()) 
           .InSingletonScope(); 

     Bind<INHSession>().To<NHSession>(); 
     Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<INHSession>().GetSession()); 
    } 
} 
} 

Truy cập điều khiển bên trong/Bộ xử lý thư mục hoạt động OK, nhưng truy cập vào bộ điều khiển trong một/Khu vực/thành viên/điều khiển ném các lỗi sau:

Server Error in '/' Application. 

Cannot be null 
Parameter name: service 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Cannot be null 
Parameter name: service 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 
[ArgumentNullException: Cannot be null 
Parameter name: service] 
Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique) +193 
Ninject.Web.Mvc.NinjectControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +41 
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +66 
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +124 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8771488 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

Version Information: Microsoft .NET Framework Version:4.0.30128; ASP.NET  Version:4.0.30128.1 

các Url cho yêu cầu này là/thành viên/controller /, Nếu tôi thay đổi Url quá/điều khiển ngọn lửa điều khiển nhưng tôi nhận được một lỗi hệ thống có thể không tìm thấy Xem trong đường dẫn/Lượt xem

Khi cần tìm kiếm trong/Area/Members/Views

Tôi đã làm điều gì đó sai trong khi nâng cấp hoặc thiếu một thứ gì đó, tôi không thể hiểu được điều gì. Tôi đã cố gắng để con số này ra trong 3 ngày ...

+0

tôi nhận được lỗi tương tự sử dụng lâu đài Windsor. –

+0

@Carles tốt để biết nó không chỉ cho tôi –

+0

Bạn sẽ có thể thiết lập một breakpoint trên NinjectControllerFactory.GetControllerInstance, bạn có thể kiểm tra lại URL yêu cầu và báo cáo lại? –

Trả lời

1

Update từ cốt lõi, tôi chỉ cam kết một sửa chữa: http://github.com/ninject/ninject.web.mvc

-Ian

+0

@ Tôi cảm ơn vì điều đó tôi sẽ cố gắng và kiểm tra nó ra vào cuối tuần này nếu tôi có thể tìm thấy thời gian. –

+0

Liên kết chính xác là http://github.com/ninject/ninject.web.mvc -xin lỗi Tôi không thể chỉnh sửa. –

Các vấn đề liên quan