0

共通ライブラリがどのコンテキスト (呼び出し元アプリとも呼ばれる) にあるのかを知るための最良の方法は何ですか? 私は非常に管理されたエンタープライズ環境にいます...構成ファイルの設定を読み取るよりも、どのアプリケーションから呼び出されているかをライブラリが知るためのより良い方法はありますか? このタイプのものには何を使用しますか?

//the rest of the story
私は Fortune 500 の製造会社のイントラネット チームで働いています。すべての新しい .Net アプリケーションが利用する共通ライブラリを作成しました。アプリケーションに関する情報と、質問に関係のない他の多くの情報について、共通のデータベースにクエリを実行します。ご想像のとおり、共通ライブラリーは、それを呼び出しているアプリケーションを認識する必要があります。すべてのアプリケーションで静的クラスなどにプロパティを設定するように強制することもできますが、その代わりに、もう少し舞台裏でそれを行いたいと考えました。現在、開発者は app.config または web.config に ApplicationName のキーと - ご想像のとおり - アプリケーション名 (私たちにとっては変更されない一意の ID) の値を設定する必要があります。次に、Currently it usesConfigurationManager.AppSettings["ApplicationName"]を使用してこれを取り込みます。

4

4 に答える 4

3

それを行う方法があるかもしれません。私はあなたの実際の質問にまったく答えるつもりはないので、おそらくこれに反対票を投じるでしょうが、何も言わずに先に進むことはできませんでした. 私にとって、これは考えられる最悪の種類の結合の例です。実際に DB を見て、それを呼び出しているアプリケーションに応じて異なる動作をする必要がありますか?

于 2008-10-16T22:04:52.597 に答える
1

共通ライブラリ クラス内でAssembly.GetEntryAssemblyを呼び出すこともできます。

次に、返されたアセンブリの .Name プロパティを使用します。

つまり、appsettings テーブル (またはそれが何であれ) をアセンブリ名でキー指定する必要があり、アセンブリ名を変更するとすべてが壊れてしまうということです。これは、ここでの命名/キーの選択の柔軟性がわずかに低いことを意味します.

于 2008-10-16T22:47:18.283 に答える
0

ここでEBGreenに同意します。これは私にとって危険信号の質問です。

そうは言っても、あなたが提案していることとは正反対のことをすることをお勧めします。呼び出している関数にパラメーターとしてキー (アプリケーション名など) を渡すだけです。エントリ ポイントが何であれ、それを public static プロパティとしてプログラムに焼き付け、基本的にリポジトリへの呼び出しをオーバーロードする小さなヘルパー関数を作成できます。それはそれを隠し、エラーが発生しやすい繰り返しを減らします..

さらに良いことに、エントリ ポイント クラスに、アプリケーション名を取得するメソッド (文字列定数を返すだけ) とデータベースから返される値を設定するメソッドを持つインターフェイスを実装させることもできます。「IIntranetApp」などと呼びます。 . 次に、「IIntranetApp」を期待する関数に「this」を渡すだけで、中央リポジトリから必要な空白が魔法のように埋められます。

何かのようなもの:

public interface IIntranetApp
{
    string GetApplicationName();
    void SetConnectionString(string connectionString);
    // etc... add methods as necessary
}
于 2008-10-16T22:41:42.053 に答える
0

getenv() は環境変数を取得します。これにより、必要なものが得られるはずです。ただし、一般に、呼び出し元プログラムの名前に応じて異なる動作をすることは、ベスト プラクティスとは見なされません。例外は、呼び出し元のプログラムの名前をログ メッセージに出力したい場合です。もちろん、他にも例外はあります。あなたの状況はその 1 つかもしれません。

おそらく、プロセス ID (getpid() を使用) を介して情報を取得することもできます。

于 2008-10-16T22:14:53.823 に答える