0

Prism Unity を使用して州コードなどのルックアップ テーブルをロードするための適切な設計に関するアドバイスを探していますか? 私のビュー ライブラリはドメイン フォーカスであり、IUnityContainer を渡すモジュールがあります。初期化セクションでは、IStateCode、StateCode などの RegisterType をコンテナーに登録します。

タイプを登録し、状態オブジェクトをロードしてから、RegisterInstance を使用する必要がありますか? これは各ドメイン (dll) で実行する必要がありますか、それともテーブルを一度集中的にロードする必要がありますか? メインウィンドウの Load でルックアップ テーブルをロードすることを考えましたが、そのモジュール内のすべてのルックアップ クラスを参照する必要があります。中央の場所を使用してルックアップ テーブルをロードする場合、ルックアップ テーブルが null であることを心配する必要はなく、1 つの領域に配置されます。どうやって言うの?

4

1 に答える 1

1

この種のことで私が採用したアプローチは、ソリューションに中心的なプロジェクトを作成することです。それは Core.UI (または好きなもの) と呼ばれます。そこで、コンテナーにシングルトンとして登録するクラスを作成します。これにより、アプリケーションの起動時に必要なデータが読み込まれます (Initialize 呼び出しを使用。コードを参照)。これは一般的にサービスと呼ばれます。

データがロードされたときに好きなだけ柔軟に作成できます。アプリケーションの読み込み時、またはプロパティに初めてアクセスしたとき。データはそれほど大きくなく、頻繁に変更されることもないので、前もって確認します。ここでも、ある種のキャッシング メカニズムを検討することもできます。

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

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; }
}

編集:

上記を Prism 6 でシングルトンとして登録するには、コンテナの初期化に使用するメソッドにこのコード行を追加します。通常はブートスタッパーにあります。

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

于 2017-01-03T18:38:26.410 に答える