2017-06-08 12 views
0

基本的なCRUD操作を行うWebアプリケーション(ASP .Net Core 1.1 MVC)があります。 Webアプリケーションは、すべての操作のためにWeb APIを使用します。ASPでのスタティックルックアップデータの読み込みと格納.Net Core webアプリケーション

ウェブアプリケーションには、基本的なテキストボックスとドロップダウンリストを含む編集用ページがいくつかあります。ドロップダウンリストの中には、静的な情報が含まれている - 例えば、これらの値を持つルックアップテーブルがあるかもしれません:

  1. デイリー
  2. 週刊
  3. 月刊
  4. 年間

ウェブAPIこれらの値を取得するためにエンドポイントを公開します。しかし、私は明らかに、ユーザーが編集ページに移動するたびにこれを呼びたくはありません。これは決して変更されない静的なデータなので、Webアプリケーションの起動時にこの参照データをAPIから一度だけ読みたいと思います。事は、これを行うための最良の場所がどこにあるのかは分かりません。 Program.csにMain()を、Startup.csにStartup()を入れますか?それともDIを使って行うべきか(どういうわけか...それがどう起こるかわからない)。このシナリオにはいくつかのベストプラクティスがありますか?

次に、このデータを保存する場所はどこですか?私はすべてのルックアップテーブルを保持する静的なグローバル変数を作成できますか?これはすべてのユーザー/セッションに適用されるデータなので、基本的なグローバルキー/値ペアのリストはうまくいくと思いましたか?私は様々なコントローラーからこれを読んで、ビュー内のドロップダウンリストに値を設定できますか?

ありがとう...ちょうどこれを正しい方法でやりたいどんなヒントも大歓迎です。

答えて

1

シングルトン(アプリケーション状態データ)でデータを保存することができます。あなたはすべてのユーザーがデータを利用できるようにDependency Injectionを使用する必要があります。

  1. (例えば、MyAppDataという名前のクラス)のデータを含むサービスを定義します。

    public class MyAppData 
    { 
    // Declare properties/methods/etc. 
    } 
    
  2. (たとえばservices.AddSingleton<MyAppData>();用)ConfigureServicesにサービスクラスを追加します。

  3. は、各コントローラにデータサービスクラスを消費:

    public class MyController : Controller 
    { 
        public MyController(MyAppData myService) 
        { 
        // Do something with the service (read some data from it, 
        // store it in a private field/property, etc.) 
        } 
    } 
    

あなたが記事でより多くの情報を見つけることができる - Introduction to session and application state in ASP.NET Coreアプリケーション状態データセクションに)

をまた、私はあなたのデータをキャッシュすることをお勧めします - Caching

最後に、フロントエンドでlocalStorageを使用して、より新しい情報が保持されるようにすることができます。

PS:ノンコアのWebサイトでアプリケーション状態を使用できます - https://stackoverflow.com/a/3733549/182344

関連する問題