【发布时间】: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