完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
    * 主體類(lèi)型
    * 企業(yè)名稱(chēng)
    * 信用代碼
    * 所在行業(yè)
    * 企業(yè)規(guī)模
    * 所在職位
    * 姓名
    * 所在行業(yè)
    * 學(xué)歷
    * 工作性質(zhì)
    請(qǐng)先選擇行業(yè)
    您還可以選擇以下福利:
    行業(yè)福利,領(lǐng)完即止!

    下載app免費(fèi)領(lǐng)取會(huì)員

    NULL

    ad.jpg

    二次開(kāi)發(fā)教程:C# 通過(guò)MVVMLight探索IOC

    發(fā)布于:2019-07-25 15:19:58

    網(wǎng)友投稿

    更多

    使用MVVMlight創(chuàng)建一個(gè)項(xiàng)目以后,MainViewModel的構(gòu)造函數(shù)是這樣的:


            public MainViewModel(IDataService dataService)

            {

                _dataService = dataService;

                _dataService.GetData(

                    (item, error) =>

                    {

                        if (error != null)

                        {

                            // Report error here

                            return;

                        }

                        WelcomeTitle = item.Title;

                    });

            }


    它依賴(lài)于一個(gè)實(shí)現(xiàn)了IDataService 的類(lèi),但是在使用的時(shí)候,代碼確實(shí)這樣的:


            public MainViewModel Main

            {

                get

                {

                    return ServiceLocator.Current.GetInstance<MainViewModel>();

                }

            }


    如果我們按照一般邏輯來(lái)寫(xiě),應(yīng)該是寫(xiě)成這樣:


            public MainViewModel Main

            {

                get

                {

                    IDataService service = new DataService();//這是一個(gè)實(shí)現(xiàn)了IDataService 的類(lèi)

                    return new MainViewModel(service);

                    //return ServiceLocator.Current.GetInstance<MainViewModel>();

                }

            }


    那這是怎么回事呢?


    在使用這個(gè)ViewModel之前SimpleIoc.Default還做了兩件事:


    SimpleIoc.Default.Register<IDataService, DataService>();//這個(gè)就應(yīng)該是所謂的依賴(lài)注入,DataService是要?jiǎng)?chuàng)建MainViewModel需要的一個(gè)參數(shù),一個(gè)依賴(lài)項(xiàng)


    SimpleIoc.Default.Register<MainViewModel>();



    而ServiceLocator.Current.GetInstance<MainViewModel>();


    所做的是使用MainViewModel的 ConstructorInfo來(lái)創(chuàng)建(第一次Get的時(shí)候創(chuàng)建),而調(diào)用 ConstructorInfo的時(shí)候,我們會(huì)發(fā)現(xiàn)它需要一個(gè)參數(shù),而這個(gè)參數(shù)的class


    的構(gòu)造函數(shù)是沒(méi)有參數(shù)的,應(yīng)為我們之前做過(guò)Register操作,所以可以通過(guò)Register時(shí)候傳的接口和類(lèi),來(lái)找到這個(gè)類(lèi),并使用反射來(lái)創(chuàng)建一個(gè)對(duì)象供MainViewModel的


    ConstructorInfo來(lái)使用,而創(chuàng)建好的MainViewModel會(huì)保存在SimpleIoc.Default里,下次使用就不必重新創(chuàng)建(這個(gè)應(yīng)該是服務(wù)定位器模式)

    本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

    未標(biāo)題-1.jpg

    上一篇:二次開(kāi)發(fā)教程:MVVMLight的Messenger

    下一篇:二次開(kāi)發(fā)教程:C# udp小程序

    60acb4e0ef112.png
    主站蜘蛛池模板: 日本一区二区在线免费观看| 国产成人综合一区精品| 精品国产一区二区三区免费看 | 日韩视频一区二区三区| 亚洲一区二区三区无码国产| 无码人妻一区二区三区精品视频| 亚洲国产成人精品无码一区二区| 2014AV天堂无码一区| 午夜视频久久久久一区| 在线电影一区二区| 国产精品久久久久久一区二区三区| 免费无码毛片一区二区APP| 国产成人久久精品区一区二区 | 97人妻无码一区二区精品免费 | 日韩一区二区免费视频| 国产成人精品日本亚洲专一区| 亚洲AV无码第一区二区三区| 亚洲日本一区二区三区在线| 亚洲国产成人久久一区WWW| 在线成人综合色一区| 无码精品不卡一区二区三区| 无码精品不卡一区二区三区 | 亚洲第一区精品观看| 日韩免费一区二区三区| 国产一区二区三区电影| 免费一区二区无码视频在线播放| 国产一区二区三区小说| 国产在线精品一区二区在线看 | 爆乳熟妇一区二区三区| 亚洲AV无码一区二区三区在线观看 | 国产成人AV区一区二区三| 国产一区二区三区美女| 久久一区二区三区99| 久久精品视频一区二区三区| 无码国产伦一区二区三区视频| 亚欧在线精品免费观看一区| 无码一区18禁3D| 日亚毛片免费乱码不卡一区| 亚洲色欲一区二区三区在线观看| 久久久久久免费一区二区三区| 少妇人妻精品一区二区三区|