この種のことで私が採用したアプローチは、ソリューションに中心的なプロジェクトを作成することです。それは 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);