2017-01-02 7 views
0

私はPrism Unityを使用して状態コードのようなルックアップテーブルを読み込むための良い設計に関するいくつかのアドバイスをお探しですか?私のビューライブラリはドメインに集中しており、IUnityContainerで渡すモジュールを持っています。初期化セクションでは、IStateCodeやStateCodeなどのRegisterTypeをコンテナに登録します。プリズム/ユニティを使用してルックアップテーブルをロードするのに最適な時期はいつですか?

タイプを登録し、状態オブジェクトをロードしてからRegisterInstanceを使用しますか?これは各ドメイン(dll)で行う必要がありますか、一度一度テーブルをロードする必要がありますか?私はmainwindowの読み込みでルックアップテーブルを読み込むことを考えましたが、そのモジュールのすべてのルックアップクラスを参照する必要がありました。ルックアップテーブルを読み込むために中央の場所を使用する場合、ルックアップテーブルがヌルであることを心配する必要はなく、1つのエリアに配置されています。どのようにyeeと言う?

答えて

1

私がこのようなことを取ったアプローチは、ソリューションに中心的なプロジェクトを作成することです。 Core.UI(またはあなたが好きなもの)と呼ぶことができます。ここでは、コンテナにシングルトンとして登録するクラスを作成します。シングルトンは、アプリケーションの起動時に必要なデータをロードします(初期化コール;コード参照)。これは一般にサービスと呼ばれます。

データを自由に読み込むことができます。アプリケーションのロード時、またはプロパティに初めてアクセスするとき。私はデータが巨大ではないので、私は前をつくっていますし、頻繁にそれを変えることはありません。ここでも、何らかのキャッシュメカニズムを考慮する必要があるかもしれません。

私は製品にも同様のことをしました。以下は米国の州コードです。

public class StateListService : IStateListService // The interface to pass around 
{ 
    IServiceFactory _service_factory; 
    const string country = "United States"; 
    public StateListService(IServiceFactory service_factory) 
    { 
     _service_factory = service_factory; 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     // I am using WCF services for data 
     // Get my WCF client from service factory 
     var address_service = _service_factory.CreateClient<IAddressService>(); 
     using (address_service) 
     { 
      try 
      { 
       // Fetch the data I need 
       var prod_list = address_service.GetStateListByCountry(country); 
       StateList = prod_list; 
      } 
      catch 
      { 
       StateList = new List<AddressPostal>(); 
      } 
     } 
    } 

    // Access the data from this property when needed 
    public List<AddressPostal> StateList { get; private set; } 
} 

EDIT:

あなたのコンテナを初期化するために使用するメソッドにこのコード行を追加し、プリズム6でシングルトンとして上記を登録するには。通常はブートストラップで。

RegisterTypeIfMissing(typeof(IStateListService), typeof(StateListService), true);

関連する問題