2 回答
TA貢獻1795條經驗 獲得超7個贊
SimpleIoc嬰兒床床單:
1)您在ViewModelLocator中注冊了所有接口和對象
class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<SecondViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
}
2)默認情況下,每個對象都是單例。要解析對象以使其不是單例,您需要將唯一值傳遞給GetInstance調用:
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
3)要針對接口注冊類:
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
4)要針對接口注冊具體對象:
SimpleIoc.Default.Register<IDataService>(myObject);
5)要注冊具體類型:
SimpleIoc.Default.Register<MainViewModel>();
6)要從接口解析對象:
SimpleIoc.Default.GetInstance<IDataService>();
7)直接解析對象(建立和依賴關系解析):
SimpleIoc.Default.GetInstance<MainViewModel>();
8)MVVM使設計時數據的確非常容易:
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
如果您處于設計時模式,它將自動注冊您的設計時服務,這使得在VS設計器中工作時在視圖模型和視圖中存儲數據變得非常容易。
希望這可以幫助。
TA貢獻1829條經驗 獲得超4個贊
1)我發現SimpleIoc拋出設計時異常,因為服務已經注冊。如果我檢查IsRegistered,然后在我的視圖模型中引用SimpleIoc,則不會顯示設計時數據(不會引發異常,只是不顯示)。如果刪除SimpleIoc并手動創建數據,那么它將在設計時顯示出來。因此,不,我認為這“真的很簡單” :)請注意,數據服務在設計時間之外工作良好。
- 2 回答
- 0 關注
- 1215 瀏覽
添加回答
舉報
