2012-02-01 9 views
3

WCFを初めて使用しています。プロジェクトの定数はどこに配置しますか?WCFプロジェクトで定数を配置する場所

私は通常、すべての静的定数を保持する名前空間を持つファイルを作成します。しかし、サービスが呼び出しごとまたはセッションごとの場合、WCFに静的変数を設定することはできません。私は自分のコードに魔法の数字を必要としません、私はプロジェクトを通して共有することができる定数が欲しいです。

ありがとうございました

+0

なぜあなたは 'const'を使用できませんか?彼らが呼び出しごとまたはセッションを変更すると、実際には定数ではありません。 –

+0

あなたの値を保持しているそのクラスの静的な読み取り専用プロパティの問題は何ですか? – Kolja

答えて

4

彼らは本当に定数である場合は、あなただけのconstキーワードと関連ファイルに入れます。スレッドセーフなので、定数は変更できません。

変数の値を変更する必要がある場合は、定数ではなく、誰が変更できるか考える必要があります。それがユーザーの責任であれば、変数を.configファイルに入れてそこから読み取ることができます。コードが変数を変更する必要がある場合、値を読み取ったり変更したりするためにいくつかのロック機構を使用することができます(ロック、ReadWriteLockなど)。

+1

彼はこの値を 'out(side)project'で定数を使って共有したいのですが、compilertimeで評価されているためです。これにより、値を変更した場合、それらの定数に依存するすべてのアセンブリを再コンパイルする必要があります。 – Kolja

+0

@Kolja正解です。 'const'を使うと、値を変更する必要があるときはいつでも再コンパイルが強制されます。 OPの要件に基づいて、XML設定や設定ファイルのようなもっと柔軟な方法がここに行く方法です。 – Yuck

+0

@Yuck私は設定オプションを追加しないで、マジックナンバーを避けたいという質問を読んでいます。 IMHOの設定は、このための残虐行為です。 – Kolja

3

彼らはを再コンパイルせずに変更することはできませんことですラップマジックナンバーをconstたり、クラスを使用して問題。設定ファイルを使用したいとします。これらはセットアップするのに直感的ではありませんので、次の手順に従ってください。プロジェクトを右クリックし、プロパティを選択します。プロジェクトにSettings.settingsファイルを作成しますハイパーリンクをクリックして

enter image description here

:次に設定タブを見つけます。その後、デザイナーの値を編集することができます(それはWCFのプロジェクトなので、あなたのケースでは)

enter image description here

値は、あなたのapp.configまたはweb.configに格納されています。

0

静的読み取り専用プロパティを持つ単純静的クラスが機能するはずです。

Public static class Foo 
{ 
    public static int Bar { get { return 1337; }} 
} 
+0

これはあなたの答えだと奇妙なことですが、 'const'は値が変更されたときに再コンパイルが必要であるという別の提案にコメントした時です。 – Yuck

+0

@ Yuckこれは、宣言しているアセンブリの外側でその値を使用しても、コンパイラによって 'const'が評価されるという欠点を免れています。あなたは単に 'const'を使用する場合に何が起こるかを宣言しているアセンブリを再コンパイルする必要があります。 – Kolja

+0

*再コンパイルする必要があります。 – Yuck

関連する問題