2010-12-09 168 views
1

我有我想在WinForms应用程序和ASP.NET网站中使用的C#代码。每个数据库连接字符串都有所不同,所以我希望能够找出它正在运行的平台并适当地设置连接字符串。有没有简单/推荐的方法来做到这一点?检测C#中运行的平台代码是什么?

这应该在WinForms和ASP.NET上编译,因此请不要使用System.WindowsSystem.Web参考。

+0

如何编写一个公共服务层,以便这两个winforms应用程序。和ASP.NET'谈'到同样的事情? – 2010-12-09 00:27:53

回答

3

该框架已经为您处理。使用System.Configuration.ConfigurationManager.AppSettingsConfigurationManager.ConnectionStrings来读取您的连接字符串,它们将从App.config WinForms中读取,并从Web.config在ASP.NET中读取。你可以在两个配置文件中添加不同的值。

至于更一般的问题 - 你可以检查System.Web.HttpContext.Current,如果它不是null你绝对在ASP.NET内部运行。如果它是null你是可能不在ASP.NET中,但可能不在请求内。您也可以尝试检查System.Web.HttpRuntime上的一些属性。

编辑:如果你不希望添加到System.Web.dll的引用,你可以通过反射调用上面:首先调用Type.GetType("System.Web.HttpContex")并且如果然后返回null你绝对不是ASP.NET 。如果它返回一个值,则可以继续获取其上的静态属性Current

+0

我想使用相同的代码虽然(更容易维护),并且System.Web.HttpContext.Current的引用不会在WinForms应用程序中编译。感谢您的配置文件的建议。 – mikel 2010-12-09 00:50:29

+0

我们做了一些类似于Evgeny建议的检查,看看system.WEb.HttpContext.Current是否存在于我们的自定义dll中,并且效果很好。也许分开的代码,检查它是否是一个不同的项目中的网络/表单应用程序(并在那里添加system.web参考?) – Lareau 2010-12-09 02:28:06

+0

@ miket2e:编辑我的答案建议反射。 – EMP 2010-12-09 04:04:27

1

让数据库代码检测到它运行的平台似乎是错误的解决方案。无论你选择什么,似乎都会有一种方法来打败它。

相反,我会有我的应用程序的入口点声明它的平台。

enum Platform { 
    AspNet, 
    WinForms 
} 

public class DataConnection { 
    public DataConnection(Platform platform) { 
    ... 
    } 
} 
相关问题