Ninject 2 с именами контроллеров MVC 2 с учетом регистра - PullRequest
0 голосов
/ 04 октября 2010

У меня есть новый проект MVC 2, использующий ninject 2 для IOC.У меня есть следующий global.asax, который настраивает как NHibernate, так и Ninject.Код работает нормально, ninject извлекает контроллеры из сборки (когда он это делает - он конвертирует их в младшие строки) -

Все URL моего контроллера теперь чувствительны к регистру, поэтому, /Home не разрешится, но / home разрешит.

Когда я использую первую букву в верхнем регистре (значение по умолчанию в MVC), я получаю ошибку «IControllerFactory Ninject.Web.Mvc.NinjectControllerFactory» не возвращает контроллердля названия «Дом». "

Неужели это не нормально?Любые идеи?

открытый класс MvcApplication: NinjectHttpApplication {public static ISessionFactory SessionFactory = CreateSessionFactory ();public MvcApplication () {this.BeginRequest + = новый EventHandler (MvcApplication_BeginRequest);this.EndRequest + = новый EventHandler (MvcApplication_EndRequest);}

    void MvcApplication_BeginRequest(object sender, EventArgs e)
    {
        CurrentSessionContext.Bind(SessionFactory.OpenSession());
    }

    void MvcApplication_EndRequest(object sender, EventArgs e)
    {
        CurrentSessionContext.Unbind(SessionFactory).Dispose();
    }

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

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

    }

    private static ISessionFactory CreateSessionFactory()
    {
        var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
        cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, @"Data Source=.\;Initial Catalog=xxxxxx;Integrated Security=true;");
        //cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, System.Environment.MachineName);
        NHibernateProfiler.Initialize();
        return cfg.BuildSessionFactory();
    }

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

    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new INinjectModule[] { 
        new ServiceModule(),
    });

    }
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

RegisterAllControllersIn больше не используется в последней версии расширения в сочетании с Ninject 2.1.Поэтому мне удается обновиться до последней версии Ninject и расширения MVC.http://teamcity.codebetter.com/project.html?projectId=project3&tab=projectOverview

Существует также пример проекта на GitHub на основе примера проекта VS2010: http://github.com/ninject/ninject.web.mvc/tree/master/mvc2/src/SampleApplication/

0 голосов
/ 04 октября 2010

Мне интересно, что делает строка RegisterAllControllersIn(Assembly.GetExecutingAssembly());?Я не вижу этого в коде Ninject.Вам не нужно вызывать какой-либо конкретный контроллер регистрации, поскольку Ninject найдет их и создаст самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...