2010-12-09 11 views
1

私はWinFormsアプリケーションとASP.NET Webサイトの両方で使用したいC#コードを持っています。しかしデータベース接続文字列はそれぞれ異なるので、どのプラットフォームで実行されているかを調べ、接続文字列を適切に設定したいと考えています。これを行う簡単な/推奨の方法はありますか?C#で実行されているプラ​​ットフォームコードを検出していますか?

これはWinFormsとASP.NETの両方でコンパイルする必要がありますので、System.WindowsまたはSystem.Webのいずれかを参照する必要はありません。

+0

両方のwinformsアプリケーションが共通のサービスレイヤを作成する方法について説明します。 ASP.NETと同じことを話していますか? –

答えて

2

構成ファイル(App.ConfigまたはWeb.Config)に接続文字列を格納し、そこから読み取るにはConfigurationManagerを使用することをお勧めします。 MSDNのStoring and Retrieving Connection Stringsを参照してください。

+0

提案をありがとう、私はそれを試してみましょう。 – mikel

+0

これはまさに私が後にしたものでした。素晴らしい作品です - ありがとう。最初の文の場合は – mikel

3

フレームワークはすでにこれを処理しています。 System.Configuration.ConfigurationManager.AppSettingsまたはConfigurationManager.ConnectionStringsを使用すると、接続文字列が読み取られ、App.config(WinForms)およびWeb.config(ASP.NET)に読み込まれます。 2つの設定ファイルに異なる値を入れることができます。

もっと一般的な質問としては、System.Web.HttpContext.Currentをチェックし、それがnullでない場合は、間違いなくASP.NET内で実行しています。それがnullの場合は、、おそらくではありませんが、リクエストに含まれていない可能性があります。また、いくつかのプロパティをSystem.Web.HttpRuntimeにチェックしてみることもできます。

編集:あなたがのSystem.Web.dllへの参照を追加したくない場合は、リフレクション経由で上記を呼び出すことができます:最初のType.GetType("System.Web.HttpContex")を呼び出し、それがnullを返す場合、あなたは、ASP.NETには間違いじゃありません。値が返された場合は、Current静的プロパティを取得することができます。

+0

両方のコードに同じコードを使用したいのですが(メンテナンスが簡単です)、System.Web.HttpContext.Currentへの参照はWinFormsアプリケーションではコンパイルされません。しかし、設定ファイルの提案をありがとう。 – mikel

+0

私たちは、System.WEb.HttpContext.Currentがカスタムdllの1つに存在するかどうかを確認するためのEvgenyの提案に似たようなことを行います。多分、別のプロジェクトのウェブ/フォームアプリケーションであるかどうかをチェックするコードを分けてください(そしてそこにsystem.webレフェリーを追加しますか?) – Lareau

+0

@ miket2e:Reflectionを提案する私の答えを編集しました。 – EMP

1

実行中のプラットフォームを検出するデータベースコードが間違った解決策のように見えることがあります。あなたが何を選んでも、それを打ち負かす方法があるようです。

代わりに、私は自分のアプリケーションのエントリポイントを宣言的に表現しています。

enum Platform { 
    AspNet, 
    WinForms 
} 

public class DataConnection { 
    public DataConnection(Platform platform) { 
    ... 
    } 
} 
+0

+1です。 – Inisheer

+0

私はASP.NETをかなり新しくしています。プラットフォームを宣言するためには、 "アプリケーションのエントリーポイント"は何ですか?私はそれがWinFormsのProgram.csであると仮定しています。 – mikel

関連する問題