将 Ninject 与 Windows Service 结合使用

本文关键字:结合 Service Windows Ninject | 更新日期: 2023-09-27 18:32:04

在Windows服务中使用Ninject有什么好的例子吗?我不确定我需要任何扩展。另外,不确定组合根应该是什么?有什么将Ninject与Windows服务一起使用的好例子吗?

将 Ninject 与 Windows Service 结合使用

在依赖注入方面,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);
}

使用 Ninject with TopShelf.. run vs install(start)我遇到了一个奇怪的问题,> MyService.exe run 与代码Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }配合使用正常

但是当我使用> MyService.exe install安装后启动服务时

它无法解析 Ninject 程序集扫描中提到的绑定。

经过几个小时的打破我的头...

.From(...)更改为.FromAssembliesMatching(...)我可以成功启动服务。

希望它对某人有所帮助。