托管 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();
}

托管 Windows 服务中承载的 WCF 服务上的依赖项注入(使用简单注入器)

这篇博客文章提供了一种可能的方法: 将 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;
}