5

我想在生產環境和發展環境方面發送不同的電子郵件,例如在測試期間僅向我發送電子郵件。我知道我可以在webconfig文件中設置應用程序值,或者在發送電子郵件之前檢查URL。我想知道這樣做的最佳做法是什麼,或者如果有其他一些我不知道的選擇可能會更好?任何關於這個主題的信息將不勝感激。最好的方式來判斷是否在.NET的生產環境或開發環境中

回答

3

我使用了所謂的Preprocessor Directives (in C#)。在VB中,它僅被稱爲Directives

我有一個輔助方法是這樣的:

public static bool IsDebug() 
{ 
    #if DEBUG 
     return true; 
    #else 
     return false; 
    #endif 
} 

然後在代碼的任何地方可以調用該方法,並在運行時,它會告訴我們,如果代碼在Debug(開發中)正在運行,或者如果這是Release版本(製作)。

這裏的等效#If...Then...#Else Directives in (VB).

1

而不是改變你的代碼,你爲什麼不開發的郵件服務器只郵件無論設置爲您地址字段?

似乎比編寫代碼更好。

+0

謝謝,是啊,我可以在IIS中設置smtp。我想我也可以將它設置爲將電子郵件存儲在一個文件夾中而不是發送它們。 – user1572948

1

嗯,只有你自己才能決定什麼是生產,什麼是發展,所以在web.config中的標誌是好的,但一個更優雅的解決方案將涉及ALA Spring.NetDependency Injection(DI)的模式,StructureMapCastle Windsor命名少數。

DI背後的關鍵概念是通過動態提供有關在運行時實例化哪些類的信息來解耦/隔離實現中的變體。例如,在這種情況下,您的所有代碼將被編寫爲處理「郵件」界面(不管它是否是開發環境或開發環境),並且您將配置您的DI框架以實例化生產版本或開發版本郵件實施課。這是更清潔一點,你不暴露和擴散配置參數值。

儘管這裏肯定有學習曲線,所以它在您的項目的這個階段可能不可行,但絕對要牢記。

1

您可以使用IIS的web config inheritance來允許您的應用程序從它所部署到的相應環境中'繼承'全局上下文設置。

在已安裝的.NET應用程序,其中的父目錄(例如/inetpub/wwwroot.web.config,甚至根web.config(\Windows\Microsoft.NET\Framework\ver\web.config),加上環境的具體設置,例如,

在PROD

<appSettings> 
    <add key="sendMailTo" value="" /> 
    <add key="environmentName" value="PROD" /> 
    </appSettings> 

在DEV

<appSettings> 
    <add key="sendMailTo" value="[email protected]" /> 
    <add key="environmentName" value="DEV" /> 
    </appSettings> 

這些環境方面的設置不會部署每次你重新部署應用。此外,在部署到y的所有其他應用我們的服務器也可以繼承這些設置。

+0

在整個站點檢查web配置值是否有任何性能成本? – user1572948

+0

@ user1572948 AppSettings被讀取一次並緩存,但進一步的性能增強是可能的http://stackoverflow.com/questions/1304897/asp-net-web-config-appsettings-performance – StuartLC

+0

感謝您的信息,如果他們只讀過一次然後緩存起來對我來說不應該成爲一個問題 – user1572948