我有一个类,需要从应用程序配置文件中获取一些设置,并在基于控制台的应用程序和Web应用程序中使用。
除了捕获异常外,我如何确定是否使用:
ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));
或
ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(WebConfigurationManager.OpenWebConfiguration("~"));
答案 0 :(得分:4)
我已经四处寻找,似乎你不能做你想做的事,因为网络模型与应用程序模型不同。有点令人惊讶的是,他们没有提供通常的情况。
我会在你的类的构造函数中添加一个Configuration
参数,并从调用代码中注入依赖项。
答案 1 :(得分:1)
虽然我并不熟悉你想要做的事情,但我的猜测是有一种方法可以获得配置部分,而无需明确指定要使用的配置(app.config与web.config)。就像您可以使用ConfigurationManager.AppSettings
来检索值,无论您的应用是否是网络应用,您都可以使用ConfigurationManager.GetSection("system.serviceModel")
吗?
如果这不起作用,我想最简单的方法就是检查System.Web.HttpContext.Current
是否为空(确保添加对System.Web
的引用),然后你可以选择哪个配置为使用
答案 2 :(得分:1)
HostingEnvironment.IsHosted
属性似乎提供了您需要的信息。
来自MSDN:
HostingEnvironment.IsHosted
财产获取一个值,该值指示当前应用程序域是否由
ApplicationManager
对象托管。
使用它,您的代码变为:
Configuration configuration = HostingEnvironment.IsHosted
? WebConfigurationManager.OpenWebConfiguration("~")
: ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
ServiceModelSectionGroup serviceModelSectionGroup =
ServiceModelSectionGroup.GetSectionGroup(configuration);
答案 3 :(得分:0)
您可以检查HttpContext,但是在您托管WCF服务的情况下,根据您拨打电话的位置,您将看不到HttpContext。为此,我通常会检查托管过程,看看它是IIS还是Cassini - 当新的操作系统版本或VS的新版本问世时,这种方法的问题是不得不担心更新库。