2012-03-26 45 views
4

在我的庫中,我爲我的Web應用程序使用HostingEnvironment.MapPath。但我需要從Windows窗體和Windows服務調用相同的功能。我可以使用「HostingEnvironment」來確定它是Web還是Win

在Windows應用程序中HostingEnvironment.ApplicationID爲null,在Web應用程序中HostingEnvironment.ApplicationID類似於「99xxx999」。

我可以使用「HostingEnvironment」來確定它是Web還是Win?

使用它的安全嗎?

if (HostingEnvironment.ApplicationID == null) 
{ 
    //called from windows application 
} 
else 
{ 
    //called from web application 
} 

回答

10

更標準的方式來做到這一點,使用HttpContext.Current方法:在你的應用程序的非HTTP相關層使用的HttpContext相關的東西

if (HttpContext.Current == null) 
{ 
    // called from windows application 
} 
else 
{ 
    // called from web application 
} 

當然是一個設計的氣味。它不僅聞起來 - >它很臭。

更爲標準的方法是讓代碼直接作爲參數傳遞文件名作爲參數。當從Web應用程序中調用時,您將通過Server.MapPath("~/foo.txt"),當您從Windows應用程序中調用它時,您將直接傳遞相對於當前可執行文件的文件名。

這樣,你的代碼不需要依賴任何HTTP特定的東西,並可以在任何平臺上愉快地重用。調用者有責任將它傳遞給你的代碼需要處理的文件名。這個文件名的確定方式是平臺特定的。不是你的代碼責任。不要混合責任。

+0

+1指出「更標準的方式」來做到這一點。感謝您陳述顯而易見(在我看來,這應該是顯而易見的,但是直到我在這裏閱讀)。 – 2013-08-05 15:54:18

相關問題