2011-09-22 77 views
2

如何檢查執行代碼是在IIS還是NUnit中運行?我問的原因是因爲我想根據我的網站是否存在或在NUnit中運行來加載不同的NHibernate配置。如何檢查正在執行的代碼是在IIS還是NUnit中運行?

var configuration = new Configuration(); 
if (IsRunningOnIIS) 
{ 
    configuration.Configure(); 
} 
else // if (IsRunningInNUnit) 
{ 
    configuration.Configure("hibernate.cfg.test.xml"); 
} 
+3

控制反轉。 – Jeremy

+2

你的代碼不應該管理這些問題:http://martinfowler.com/articles/injection.html – jason

+0

即使你得到這個工作,這是錯誤的方法,並污染代碼庫 - 你真的,真的需要注入這些依賴關係。根據前面兩條評論 – BrokenGlass

回答

4

這是一種錯誤的方法,您應該使用依賴注入。但既然你問:

Process currentProcess = Process.GetCurrentProcess(); 
if(currentProcess.ProcessName == "w3wp") { 
    // IIS 
} else if (currentProcess.ProcessName == "nunit-agent") { 
    // NUnit 
} 

if(HttpContext.Current != null) { 
    // IIS 
} else { 
    // NOT IIS 
} 

您可能需要,如果你使用類似ReSharper的與你的跑步者的名稱來代替「NUnit的代理」。理想情況下,您可以在應用程序啓動時將配置注入初始化代碼(手動或使用DI容器)。訂購Dependency Injection in .NET書。

+0

+1的建議,閱讀依賴注入和IOC以回答* how *。我將使用IoC作爲OP的建議,tho。 –

+0

謝謝 - 不用擔心,這只是暫時的,我會用IoC,但我正在嘗試做一些真正快速的事情。 –

相關問題