2010-06-06 41 views
0

我有一個類需要從應用程序配置文件中獲取一些設置,並在基於控制檯的應用程序和Web應用程序中使用。我的.Net應用程序如何確定是使用app.config還是web.config

除了捕獲異常我怎麼能確定是否使用:

ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)); 

ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(WebConfigurationManager.OpenWebConfiguration("~")); 
+4

也許我失去了一些東西 - 你爲什麼不能使用'ConfigurationManager.GetSection()'? – roufamatic 2010-06-06 12:46:11

+0

我需要列出system.serviceModel配置節點中的客戶端端點,我不認爲GetSection方法允許我將該節點作爲ServiceModelSectionGroup對象進行檢索。 – sipwiz 2010-06-06 12:52:58

+1

你可以將它作爲'SectionGroup'和_cast_賦值給'ServiceModelSectionGroup'。 – Oded 2010-06-06 12:59:24

回答

4

我捅過了,看起來你不能做你想做的事,因爲Web模型與應用程序模型不同。有點令人驚訝的是,他們沒有提供這種常見的情況。

我想爲你的類的構造函數添加一個Configuration參數,並從調用代碼中注入依賴項。

1

雖然我不熟悉你想要做什麼,我的猜測有一種方法可以在不明確指定使用什麼配置的情況下獲取配置部分(app.config與web.config)。就像您可以使用ConfigurationManager.AppSettings來檢索值,無論您的應用程序是否爲Web應用程序,您是否可以使用ConfigurationManager.GetSection("system.serviceModel")

如果不工作,我想最簡單的事情是簡單地檢查是否System.Web.HttpContext.Current爲空(請務必添加引用System.Web),那麼你可以選擇要使用的配置。

0

您可以檢查HttpContext,但有些情況下您託管的WCF服務取決於您在哪裏進行調用,您將看不到HttpContext。要做到這一點,我通常會檢查主機進程,看看它是IIS還是卡西尼 - 當新的操作系統版本或VS的新版本問世時,這種方法的問題是不得不擔心更新庫。

0

HostingEnvironment.IsHosted屬性似乎提供您需要的信息。 從MSDN:

HostingEnvironment.IsHosted屬性

獲取指示是否當前應用程序域正由一個ApplicationManager對象承載的值。

使用它,你的代碼就變成了:

Configuration configuration = HostingEnvironment.IsHosted 
    ? WebConfigurationManager.OpenWebConfiguration("~") 
    : ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 

ServiceModelSectionGroup serviceModelSectionGroup = 
    ServiceModelSectionGroup.GetSectionGroup(configuration); 
相關問題