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