2011-09-22 78 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,但我正在尝试做一些真正快速的事情。 –

相关问题