2009-12-18 5 views
1

Я использую Ninject 2 с веб-приложением ASP.NET MVC. Все зависимости обрабатываются должным образом по стеку (Controllers-> Services-> Repositories). Однако у меня есть несколько классов в проекте Services, которые не входят в эту «цепочку», которую я также хочу ввести, когда приложение запускается. Как я могу получить Ninject для их распознавания? У меня есть общедоступные свойства с атрибутами [Inject], но при запуске приложения они равны нулю. Что мне не хватает?Вопрос об инъекции при использовании Ninject 2 в приложении ASP.NET MVC

Вот мой MvcApplication класс:

public class MvcApplication : NinjectHttpApplication 
{ 
    protected override void OnApplicationStarted() { 
     RegisterRoutes(RouteTable.Routes); 
     RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    } 

    protected override IKernel CreateKernel() { 
     var modules = new INinjectModule[] { 
      new Services.ServiceModule(), 
      new Data.DataModule() 
     }; 

     var kernel = new StandardKernel(modules); 

     return kernel; 
    } 

    // route registration removed 
} 

Я проверил оба модуля, чтобы убедиться, что существуют правильные привязок.

Пример из модуля:

public class ServiceModule : NinjectModule 
{ 
    public override void Load() { 
     Bind<IAccountService>().To<AccountService>(); 
     .... 
    } 
} 

ответ

2

Для того, чтобы Ninject вводил зависимости, вы должны создать объект с помощью ядра. Это легко для объектов в цепочке естественных зависимостей (т. Е. В вашем приложении, Controllers-> Services-> Repositories), но может оказаться сложным для тех, кто находится за его пределами.

Вы должны либо добавить дополнительные типы в зависимости от одного из типов, которые создаются в естественной цепочке, либо как-то получить крючок на ядре и вызвать Get <T>. Для этого вам, возможно, придется использовать статический сервисный локатор.

0

Вы перекрывая CreateKernel()? Вам нужно сделать это и сделать свою привязку там.

+0

Да, я делаю это. Я обновлю вопрос –

+0

Добавил код и попытался уточнить лучше –

+0

Все выглядит хорошо. Можете ли вы опубликовать часть кода в одном из своих модулей? –

 Смежные вопросы

  • Нет связанных вопросов^_^