【问题标题】:Dependency Injection (using simple injector) on a WCF Service hosted in a Managed Windows Service托管在托管 Windows 服务中的 WCF 服务上的依赖项注入(使用简单的注入器)
【发布时间】:2016-02-04 17:29:31
【问题描述】:

我正在创建一个托管在 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?

更重要的是,我应该如何调用(或创建)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();
}

【问题讨论】:

  • 我建议你看看书Dependency Injection in .NET。第 7.3 节详细介绍了如何为 DI 配置 WCF(这不是我做过的事情,所以我只是发表评论)。我发现构建我自己的 DI 集成组件很有用,因为通常(如您的情况)来自 3rd 方的库存组件不适合您的应用程序的用例,这本书告诉您如何与 WCF 构建这样的集成。跨度>
  • 我同意 NightOwl。我对 WCF 从来没有任何问题,因为我将 WCF 服务类用作不起眼的对象,并将其视为我的组合根的一部分。这意味着我的 WCF 服务不包含应用程序逻辑,而只是从包含逻辑的容器中解析服务。
  • this post 可能对你有用...

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2012-01-13
    相关资源
    最近更新 更多