Ninject MVC3 — как разрешается тип

Сценарий: я установил Ninject MVC3, используя приведенную ниже ссылку: https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

Я следовал версии Nuget. И код выглядит следующим образом:

private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IService>().<Service>();
    }   

Может ли кто-нибудь помочь мне понять, когда и где выполняется приведенный ниже код?

var test=Kernel.Get<Service>();

В основном я пытаюсь понять, где мы разрешаем конкретный тип.

ОБНОВЛЕНИЕ:

мой вопрос больше о том, где MVC использует Kernel.Get() для преобразования данного интерфейса в конкретный тип.

Это делается Ninject.MVC?


person Nil Pun    schedule 28.06.2012    source источник
comment
Я использую собственную фабрику контроллеров, и конструкторам моих контроллеров требуются параметры репозиториев, сервисов и т. д.   -  person dan_l    schedule 28.06.2012
comment
вот несколько ссылок craftyfella.com/2010/02/ создание-aspnet-mvc-2-controller.html   -  person dan_l    schedule 28.06.2012
comment
другая ссылка github.com/ninject/ninject.web.mvc   -  person dan_l    schedule 28.06.2012
comment
мой вопрос о том, где MVC использует Kernel.Get‹Service›() для преобразования данного интерфейса в конкретный тип.   -  person Nil Pun    schedule 30.06.2012


Ответы (1)


Kernel.Get<Service>() нигде не должно вызываться. Вы должны запросить IService в конструкторе контроллера, которому нужна эта зависимость. Когда MVC требует этот контроллер, он просит Ninject создать экземпляр контроллера, и Ninject внедрит службу в контроллер.

person Remo Gloor    schedule 02.07.2012
comment
+1 @Myagdi еще немного подробной информации: Ninject.MVC3 вставляет App_Start, который при запуске приложения в IIS сообщает MVC использовать Ninject для создания контроллеров (именно так последовательность, описанная Ремо, становится возможной) - person Ruben Bartelink; 02.07.2012