Ninject 2 и MVC 2.0 - PullRequest
       11

Ninject 2 и MVC 2.0

6 голосов
/ 19 марта 2010

Я обновил проект до VS2010 и MVC2 с VS2008 и MVC1. У меня проблемы с Ninject, не могу найти контроллеры в областях

Вот мой файл global.asax.cs:

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

Доступ к контроллерам в папке / Controllers работает нормально, но при доступе к контроллерам в / Areas / Member / Controller выдается следующая ошибка:

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

URL-адрес для этого запроса: / Member / Controller /, если я тоже изменяю URL-адрес / Controller, контроллер запускается, но я получаю ошибку, что система не может найти представление в пути / Views

Когда это надо искать в / Area / Members / Views

Я либо сделал что-то не так в обновлении, либо мне чего-то не хватает, но я просто не могу понять, что именно. Я пытался понять это в течение 3 дней ...

1 Ответ

1 голос
/ 25 марта 2010

Обновление из ядра, я только что исправил: http://github.com/ninject/ninject.web.mvc

-Ian

...