2012-04-23 2 views
18

Любые хорошие примеры использования Ninject с помощью службы Windows? Я не уверен, что, если какие-либо расширения мне нужны. Кроме того, не знаете, что должно быть корнем композиции? Какие-нибудь хорошие примеры использования Ninject с сервисом Windows?Использование Ninject с помощью службы Windows

ответ

19

Служба Windows не сильно отличается от обычного приложения командной строки в отношении инъекции зависимостей. Прямой составной корень композиции - ваш метод Main.

Как я обычно делал это, создайте там StandardKernel с модулем, в котором разрешены мои зависимости. Затем используйте kernel.Get для разрешения зависимостей верхнего уровня - все остальное будет следовать оттуда:

static void Main(string[] args) 
{ 
    var kernel = new StandardKernel(new FooModule()); 
    var barDependency = kernel.Get<Bar>(); 

    System.ServiceProcess.ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] { new FooService(barDependency) }; 
    System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
} 
+1

Есть ли у Microsoft способ внедрить модули Ninject (или ядро) выше, поэтому вам не нужно выполнять поиск сервисов? (не большое дело только за пару зависимостей - просто любопытно) –

+0

Nope. Не то, чтобы вы начали очень похоже на консольное приложение. Вы можете сделать шаблонный заводский (или фабричный метод) подход к созданию своего сервиса, если вам нужно это сделать. –

+0

Dan, основным методом является отправная точка. Решения для веб-приложений и т. Д. На самом деле являются обходными решениями, поскольку веб-приложение не имеет хорошей отправной точки. –

1

Использование Ninject с Topshelf .. работать против установки (старт) я столкнулся странный вопрос, где > MyService.exe run прекрасно работает с кодом Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

Но когда я запустить службу после установки с помощью > MyService.exe install

он не мог решить привязок, упомянутые в Ninject сканирования сборки.

Через несколько часов ломать голову ...

изменяя .From(...) к .FromAssembliesMatching(...) я мог запустить службу успешно.

Надеюсь, это поможет кому-то.

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