亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用MVVMLight SimpleIoc?

如何使用MVVMLight SimpleIoc?

C#
瀟瀟雨雨 2019-11-08 10:31:07
我正在對軟件進行升級,該軟件有些混亂Messenger.Default(...)。是否有任何備忘單來了解MVVMLight SimpleIoc的用法(不是一般的IoC描述)?
查看完整描述

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設計器中工作時在視圖模型和視圖中存儲數據變得非常容易。


希望這可以幫助。


查看完整回答
反對 回復 2019-11-08
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

1)我發現SimpleIoc拋出設計時異常,因為服務已經注冊。如果我檢查IsRegistered,然后在我的視圖模型中引用SimpleIoc,則不會顯示設計時數據(不會引發異常,只是不顯示)。如果刪除SimpleIoc并手動創建數據,那么它將在設計時顯示出來。因此,不,我認為這“真的很簡單” :)請注意,數據服務在設計時間之外工作良好。

查看完整回答
反對 回復 2019-11-08
  • 2 回答
  • 0 關注
  • 1215 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號