Asp.Net WebAPIのすべてのコントローラ/アクションメソッド間でシングルトン共有オブジェクトを公開する必要があります。このようなグローバルな静的オブジェクトを宣言して、すべてのコントローラ/アクションメソッドがそのオブジェクトにアクセスできるようにするには、どの場所が最適ですか?すべてのAPIコントローラ/アクションメソッドで共有されるグローバル静的オブジェクト
1
A
答えて
2
Lazy<T>
を使用できます。これは、スレッドの安全性を確保します:
public class Greeter
{
public static readonly Lazy<Greeter> Instance = new Lazy<Greeter>(() => new Greeter());
public Greeter()
{
// I am called once during the applications lifetime
}
public string Greet(string name)
{
return $"Hello {name}!";
}
}
は、その後、あなたが好きな場所にこれを使用します。
public class GreetController : ApiController
{
public IHttpActionResult Get(string name)
{
var message = Greeter.Instance.Value.Greet(name);
return Ok(message);
}
}
1
あなたのWebApiApplication(Global.asax.cs)内の変数を宣言すると、コードとすべてのコントローラでそれを使用することができます。
var globalValue = (HttpContext.Current.ApplicationInstance as WebApiApplication).GlobalVariableName;
しかし、あなたは、オーバーヘッド取得しますので、私のためとして、それは、最善の方法ではありません初期化と設定値で、またアーキテクチャの問題のように見えます。
なぜグローバルオブジェクトが必要ですか? 新しい親コントローラを宣言してこの関数を宣言する関数がある場合は、 読み取り専用のデータが必要な場合は、web.cofigに入力してください。
2
を「最善」の方法は、DI(依存性注入)コンテナを使用して、コントローラにシングルトンを注入することですそれを必要とする。私はNinjectを使っていますので、これを使っていますが、あなたが決めるコンテナにコードを簡単に適応させることができます。すなわち
NinjectWebCommon.cs
kernel.Bind<MySingleton>().ToSelf().InSingletonScope();
コントローラ(S)
public class FooController : ApiController
{
protected readonly MySingleton mySingleton;
public FooController(MySingleton mySingleton)
{
this.mySingleton = mySingleton;
}
}
、DIコンテナはシングルトンを管理します。あなたのコントローラーは、シングルトンをコンストラクターパラメーターとして受け入れ、コントローラーに設定します。 DIコンテナはシングルトンをコントローラに注入し、コントローラの他のメンバと同じように自由に使用することができます。
関連する問題
- 1. 共有オブジェクト内の静的ライブラリの静的関数
- 2. 静的クラスはAppDomain間で共有されていますか?
- 3. グローバル静的変数または共有設定android
- 4. 静的クラスメンバーの共有ライブラリ
- 5. 静的オブジェクトから共有オブジェクトへのシンボルのコピー
- 6. GOTを使用して参照される共有オブジェクトで定義された非静的グローバル変数はなぜですか?
- 7. 共有ライブラリの静的グローバル変数のインテリゼーションを遅延する方法
- 8. ブースト - 「静的」vs「共有」ライブラリ
- 9. 静的またはキャッシュとしてasp.netオブジェクトを共有
- 10. g ++は共有オブジェクトの静的バージョンをリンクできません
- 11. 動的リンクされた共有ライブラリのグローバル変数と静的変数はどうなりますか?
- 12. MinGWとの静的/動的/共有リンク
- 13. 共有ライブラリ内の静的ライブラリのAndroid NDKコールAPI
- 14. Javaでは、静的なクラスメンバーはプログラム間で共有されていますか?
- 15. node.jsでオブジェクトを共有してグローバルを避ける
- 16. Web APIリクエスト(ユーザーセッション)全体で静的コレクションを共有して更新します
- 17. Web API 2の静的オブジェクト
- 18. フォーク後、グローバル変数は共有されていますか?
- 19. 異なる共有ライブラリ間で使用されるグローバル変数
- 20. 共有グローバル変数
- 21. なぜ静的共有設定が保存されないのですか?
- 22. 静的対動的CUDA共有メモリ割り当てのパフォーマンス
- 23. Android静的変数と共有設定
- 24. 現在ロードされているすべての共有オブジェクトのすべてのELFセクションを列挙します。
- 25. スレッド間で共有される静的メソッド内でのみ使用される変数は何故ですか?
- 26. 静的ライブラリをテストするか、プロジェクト間で共有する
- 27. 共有ホスティングでエクスプレスで静的フォルダを使用する方法
- 28. Facebook API:すべての友達が共有するすべてのリンク?
- 29. グローバル変数/オブジェクトをRequireJSと共有する方法
- 30. WCFクライアントアプリケーション間で静的なDLLを共有する
ライブラリーを作成してそこにシングルトンを入れてください –
**静的オブジェクトまたはシングルトンを使用しないでください** ** * *使用しないでください! ASP.NET MVCは依存性注入をサポートしています。 –
すべての答えをお寄せいただきありがとうございます。 –