我正在创建一个托管在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();
}
答案 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;
}