完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:C# 通過MVVMLight探索IOC

    發布于:2019-07-25 15:19:58

    網友投稿

    更多

    使用MVVMlight創建一個項目以后,MainViewModel的構造函數是這樣的:


            public MainViewModel(IDataService dataService)

            {

                _dataService = dataService;

                _dataService.GetData(

                    (item, error) =>

                    {

                        if (error != null)

                        {

                            // Report error here

                            return;

                        }

                        WelcomeTitle = item.Title;

                    });

            }


    它依賴于一個實現了IDataService 的類,但是在使用的時候,代碼確實這樣的:


            public MainViewModel Main

            {

                get

                {

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

                }

            }


    如果我們按照一般邏輯來寫,應該是寫成這樣:


            public MainViewModel Main

            {

                get

                {

                    IDataService service = new DataService();//這是一個實現了IDataService 的類

                    return new MainViewModel(service);

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

                }

            }


    那這是怎么回事呢?


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


    SimpleIoc.Default.Register<IDataService, DataService>();//這個就應該是所謂的依賴注入,DataService是要創建MainViewModel需要的一個參數,一個依賴項


    SimpleIoc.Default.Register<MainViewModel>();



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


    所做的是使用MainViewModel的 ConstructorInfo來創建(第一次Get的時候創建),而調用 ConstructorInfo的時候,我們會發現它需要一個參數,而這個參數的class


    的構造函數是沒有參數的,應為我們之前做過Register操作,所以可以通過Register時候傳的接口和類,來找到這個類,并使用反射來創建一個對象供MainViewModel的


    ConstructorInfo來使用,而創建好的MainViewModel會保存在SimpleIoc.Default里,下次使用就不必重新創建(這個應該是服務定位器模式)

    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:MVVMLight的Messenger

    下一篇:二次開發教程:C# udp小程序

    主站蜘蛛池模板: 老熟女高潮一区二区三区| 一区二区三区午夜| 久久精品国产一区二区电影| 日韩免费无码视频一区二区三区| 亚洲性无码一区二区三区| 免费日本一区二区| 国产精品一区视频| 无码国产精品一区二区免费式芒果| 波多野结衣中文字幕一区| 日本一区二区三区爆乳| 麻豆一区二区在我观看| 看电影来5566一区.二区| 国产一区二区视频在线播放| 日本韩国一区二区三区| 99国产精品欧美一区二区三区| 国产精品福利一区二区久久| 无码免费一区二区三区免费播放| 三上悠亚亚洲一区高清| 天堂Aⅴ无码一区二区三区| 国产伦精品一区二区三区视频小说| 久久精品一区二区三区四区| 亚洲AV综合色区无码一区爱AV| 国产伦精品一区二区免费| 国产一在线精品一区在线观看| 国产品无码一区二区三区在线蜜桃 | 久久久久国产一区二区| 一区二区在线视频观看| 无码人妻一区二区三区在线水卜樱| 高清在线一区二区| V一区无码内射国产| 国产一在线精品一区在线观看| 久久青草国产精品一区| 激情亚洲一区国产精品| 成人免费一区二区无码视频| 国产综合无码一区二区色蜜蜜| 精品视频一区二区观看| 国产一区二区高清在线播放| 亚洲AV无码一区东京热| 亚洲综合色一区二区三区| 国产精品视频免费一区二区三区| 美女视频一区二区三区|