完善主體資料,免費贈送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小程序

      主站蜘蛛池模板: 亚洲国产精品第一区二区| 国产亚洲福利一区二区免费看| 三上悠亚亚洲一区高清| 视频一区二区中文字幕| 亚洲av无码一区二区乱子伦as| 亚洲日韩AV无码一区二区三区人| 精品人妻一区二区三区四区| 亚洲午夜精品第一区二区8050| 精品亚洲A∨无码一区二区三区| 综合一区自拍亚洲综合图区| 亚洲国产成人久久一区久久| 亚洲日本va午夜中文字幕一区| 美女视频一区二区| 国产福利无码一区在线| 精品一区二区三区自拍图片区| 日韩十八禁一区二区久久| 韩国福利影视一区二区三区| 午夜视频久久久久一区| 久久精品国产AV一区二区三区| 国产情侣一区二区三区| 一区二区和激情视频| 亚洲AV综合色区无码一区| 国产激情一区二区三区成人91 | 四虎在线观看一区二区| 日韩人妻精品一区二区三区视频| 亚洲AV无码一区二三区| 在线观看一区二区精品视频| 无码AV天堂一区二区三区| 国产丝袜美女一区二区三区| 日本人的色道www免费一区| 亚洲一区二区三区高清在线观看| 日韩人妻一区二区三区蜜桃视频 | 偷拍精品视频一区二区三区| 久久久久人妻一区精品性色av| 日本高清不卡一区| 亚洲视频一区在线观看| 亚洲国产精品第一区二区| 久久久久人妻一区二区三区vr| 国产高清不卡一区二区| 色狠狠AV一区二区三区| 国产免费一区二区三区|