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

时间:2016-02-04 17:29:31

标签: c# wcf dependency-injection windows-services simple-injector

我正在创建一个托管在Windows服务上的WCF服务,如下所述:https://msdn.microsoft.com/en-us/library/ms733069(v=vs.110).aspx

我的服务有一些依赖。

使用Simple Inyector在这里应用DI的正确方法。

我在这里阅读了有关SimpleInjectorServiceHostFactory类的https://simpleinjector.readthedocs.org/en/latest/wcfintegration.html,但它似乎只适用于IIS托管服务。

在第一个示例中,我假设我在Main()方法上注册了类型,但是我应该如何创建ServiceBase?

更重要的是,我应该如何调用(或创建)servicehost实例。我应该从某个地方获取容器并使用它直接创建实际服务的实例。这对我来说似乎很难看

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

1 个答案:

答案 0 :(得分:0)

此博客文章提供了一种可能的方法:Decouple WCF Services from their DI Container with Common Instance Factory

创建servicehost实例的相关代码:

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;
}