Обнаружение кода какой платформы выполняется в C #? - PullRequest
1 голос
/ 09 декабря 2010

У меня есть код C #, который я хочу использовать как в приложении WinForms, так и на веб-сайте ASP.NET.Строка подключения к базе данных отличается для каждого, хотя, поэтому я хочу быть в состоянии выяснить, на какой платформе она работает, и установить строку подключения соответствующим образом.Есть ли простой / рекомендуемый способ сделать это?

Это должно скомпилироваться как на WinForms, так и на ASP.NET, так что ничего, что не требует ссылки System.Windows или System.Web, пожалуйста.

Ответы [ 3 ]

3 голосов
/ 09 декабря 2010

Фреймворк уже обрабатывает это для вас.Используйте System.Configuration.ConfigurationManager.AppSettings или ConfigurationManager.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.

2 голосов
/ 09 декабря 2010

Рекомендуется сохранить строку подключения в файле конфигурации - App.Config или Web.Config и использовать ConfigurationManager для чтения из этого. См. Хранение и получение строк подключения из MSDN.

1 голос
/ 09 декабря 2010

Код базы данных, определяющий платформу, на которой он работает, кажется неправильным решением.Неважно, что вы выберете, похоже, что есть способ победить.

Вместо этого я хотел бы, чтобы точка входа в мое приложение декларативно отображала платформу.

enum Platform {
  AspNet,
  WinForms
}

public class DataConnection {
  public DataConnection(Platform platform) {
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...