2009-04-10 2 views
4

У меня есть простой сервис win, который периодически выполняет несколько задач. Как передать ядро ​​Ninject всем классам задач?Ссылка на нуль ядра в службе win

Это хорошая идея создать статическую переменную базового класса задач и инициализировать ее при запуске службы?

ответ

1

Вместо статической переменной в базовом классе задач я бы предпочел внедрить ядро ​​в каждый экземпляр класса. Это обеспечивает немного большую гибкость, если вы когда-нибудь решите, что вам нужно больше одного ядра (по какой-либо причине). Статическая переменная в базовом классе просто выглядит yucky, из-за отсутствия лучшего термина.

+0

, но вам не нужно само ядро ​​для ввода ядра. Как вы получите это в этом случае? Это то, что я сейчас не могу понять. – mamu

+0

Да, это так. Однако то, что вы пытаетесь сделать, если хотите, создает ядро ​​в некотором «объектном корне», что обычно является не всегда точкой входа в код. В случае службы Windows реакция на OnStart может быть лучшей логической точкой входа может быть такой же высокой, как и в главной() точке входа в процесс. В этот момент ядро ​​может быть создано и вручную введено в службу, которое затем может передать его по цепочке зависимостей. –

+1

Я бы добавил, однако, что если ядро ​​передается, это означает, что некоторый класс где-то будет новичком, но будет использовать ядро ​​для разрешения этих зависимостей объектов. Если это сценарий, альтернативный подход заключается в использовании библиотеки CommonServiceLocator (которая фактически содержит статическую ссылку на ядро ​​с помощью класса адаптера.) Преимущество такого подхода заключается не в том, что целая куча ваших классов принимает прямую зависимость на ядре Ninject. –