如何检查执行代码是在IIS还是NUnit中运行?我问的原因是因为我想根据我的网站是在线还是在NUnit中运行来加载不同的NHibernate配置。
var configuration = new Configuration();
if (IsRunningOnIIS)
{
configuration.Configure();
}
else // if (IsRunningInNUnit)
{
configuration.Configure("hibernate.cfg.test.xml");
}
答案 0 :(得分: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-agent'。理想情况下,您可以在应用程序启动时(手动或使用DI容器)将Configuration注入初始化代码中。订购Dependency Injection in .NET本书。