2 回答

TA貢獻1795條經(jīng)驗 獲得超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調(diào)用:
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)直接解析對象(建立和依賴關(guān)系解析):
SimpleIoc.Default.GetInstance<MainViewModel>();
8)MVVM使設(shè)計時數(shù)據(jù)的確非常容易:
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
如果您處于設(shè)計時模式,它將自動注冊您的設(shè)計時服務(wù),這使得在VS設(shè)計器中工作時在視圖模型和視圖中存儲數(shù)據(jù)變得非常容易。
希望這可以幫助。

TA貢獻1829條經(jīng)驗 獲得超4個贊
1)我發(fā)現(xiàn)SimpleIoc拋出設(shè)計時異常,因為服務(wù)已經(jīng)注冊。如果我檢查IsRegistered,然后在我的視圖模型中引用SimpleIoc,則不會顯示設(shè)計時數(shù)據(jù)(不會引發(fā)異常,只是不顯示)。如果刪除SimpleIoc并手動創(chuàng)建數(shù)據(jù),那么它將在設(shè)計時顯示出來。因此,不,我認為這“真的很簡單” :)請注意,數(shù)據(jù)服務(wù)在設(shè)計時間之外工作良好。
- 2 回答
- 0 關(guān)注
- 1179 瀏覽
添加回答
舉報