0

我正在創建一個Windows服務上託管的WCF服務,如此處所述:https://msdn.microsoft.com/en-us/library/ms733069(v=vs.110).aspx在託管Windows服務中託管的WCF服務上的依賴注入(使用簡單注入器)

我的服務有一些依賴關係。

這將是正確的方式來應用DI在這裏使用簡單Inyector。

我在這裏閱讀了SimpleInjectorServiceHostFactory類https://simpleinjector.readthedocs.org/en/latest/wcfintegration.html,但它似乎只適用於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(); 
} 
+1

我建議你看看這本書[.NET中的依賴注入](https://www.manning.com/books/dependency-injection-in-dot-net)。第7.3節詳細介紹瞭如何爲DI配置WCF(這不是我所做的,所以我只是留下評論)。我發現構建自己的DI集成組件非常有用,因爲通常(和你的情況一樣)來自第三方的股票不適合你的應用程序的用例,本書告訴你如何與WCF建立這樣的集成。 – NightOwl888

+1

我同意NightOwl。我從來沒有WCF的任何問題,因爲我使用WCF服務類作爲謙虛的對象,並將其視爲我的作文根的一部分。這意味着我的WCF服務不包含應用程序邏輯,只需從包含邏輯的容器中解析服務即可。 – Steven

+1

[此帖子](https://cuttingedge.it/blogs/steven/pivot/entry.php?id=95)可能對您有用...... – qujck

回答

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