2013-03-04 122 views
0

我目前正在嘗試學習如何創建WCF服務,而且我正面臨一個問題。循環依賴問題

我有一個項目叫做MainProject這是一個控制檯應用程序,第二個項目叫做SoapServer,它被創建爲一個類庫。

MainProject不需要引用SoapServer,但SoapServer確實需要引用來自MainProject內的東西。

但是,儘管MainProject不需要訪問SoapServer,但它可以讓控制檯應用程序在WCF服務上啓動主機。

但是,這顯然會導致循環依賴,因爲我不能讓MainProject引用SoapServer,反之亦然。有沒有辦法讓這一輪。

下面是我如何打開WCF服務的連接。

public class SoapServer : ISoapServerInterface 
    { 

     public void startSoapServer() 
     { 
      Uri baseAddress = new Uri("http://localhost:6525/hello"); 

      using (ServiceHost host = new ServiceHost(typeof(SoapServer), baseAddress)) 
      { 
       ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
       smb.HttpGetEnabled = true; 
       smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
       host.Description.Behaviors.Add(smb); 

       host.Open(); 

       Console.WriteLine("The service is ready at: {0}", baseAddress); 
       Console.WriteLine("Press <Enter> to stop the service"); 
       Console.ReadLine(); 
       host.Close(); 

      } 
     } 

感謝您提供任何幫助。

+1

添加一個額外的項目/程序集,其中包含兩個項目共享的類型。 http://java.dzone.com/articles/breaking-dependency-cycles – rene 2013-03-04 19:42:48

回答

1

託管應用程序(MainProject)中不應該有太多的代碼。它只負責託管服務,這是它唯一的目的。 不要在那裏放置常用代碼。

而是創建另一個具有常用代碼的類庫,並從SoapServer和MainProject創建對它的引用。