托管 Windows 服务中承载的 WCF 服务上的依赖项注入(使用简单注入器)
本文关键字:服务 注入 简单 注入器 Windows 托管 WCF 依赖 | 更新日期: 2023-09-27 18:33:11
我正在创建一个托管在Windows服务上的WCF服务,如下所述:https://msdn.microsoft.com/en-us/library/ms733069(v=vs.110).aspx。
我的服务有一些依赖项。
这将是使用Simple Inyector在此处应用DI的正确方法。
我 https://simpleinjector.readthedocs.org/en/latest/wcfintegration.html 在这里阅读了有关SimpleInjectorServiceHostFactory类的信息,但它似乎仅适用于IIS托管服务。
在第一个示例中,我假设我在 Main() 方法上注册了类型,但是我应该如何创建 ServiceBase?
更重要的是,我应该如何调用(或创建)服务主机实例。我应该从某个地方获取容器并使用它直接创建真实服务的实例吗?这对我来说似乎很丑陋
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
// Create a ServiceHost for the CalculatorService type using the
// container directly
serviceHost = serviceHost = new ServiceHost(container.GetInstance<ICalculatorService>());
serviceHost.Open();
}
这篇博客文章提供了一种可能的方法: 将 WCF 服务与其 DI 容器与通用实例工厂
分离用于创建服务主机实例的相关代码:
ServiceHost serviceHost;
var serviceBaseAddress = new Uri('http://localhost:8000/GreetingService');
switch (containerType)
{
case ContainerType.Ninject:
serviceHost = new NinjectServiceHost<GreetingService>
(CreateNinjectContainer(), typeof(GreetingService), serviceBaseAddress);
break;
case ContainerType.SimpleInjector:
serviceHost = new SimpleInjectorServiceHost<GreetingService>
(CreateSimpleInjectorContainer(), typeof(GreetingService), serviceBaseAddress);
break;
}