我採取的這種方法是在解決方案中創建一箇中心項目;這可以稱爲Core.UI(或任何你喜歡的)。在那裏,我創建了一個類,它以container的身份註冊爲singleton,它在應用程序啓動時加載它需要的數據(通過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; }
}
編輯:
要註冊上面一個單在棱鏡6,這行代碼添加到您用來初始化容器的製造方法。通常在bootstapper中。
RegisterTypeIfMissing(typeof(IStateListService), typeof(StateListService), true);