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

      主站蜘蛛池模板: 亚洲愉拍一区二区三区| 国产一区二区三区国产精品| 日韩精品一区二区三区中文3d| 日韩精品无码一区二区三区不卡| 久久精品一区二区| 性色AV一区二区三区天美传媒| 中文精品一区二区三区四区| 亚洲午夜精品第一区二区8050| 一区二区三区四区无限乱码 | 精品亚洲AV无码一区二区三区| 无码一区二区三区| 精品国产aⅴ无码一区二区| 国产精品区AV一区二区| 国产成人一区二区三区视频免费| 国产日韩精品一区二区三区 | 无码国产精品一区二区免费虚拟VR | 亚洲欧洲一区二区三区| 无码中文人妻在线一区二区三区| 成人免费区一区二区三区| 亚洲色婷婷一区二区三区| 精品中文字幕一区二区三区四区| 夜色阁亚洲一区二区三区| 亚洲AV网一区二区三区| 久久精品人妻一区二区三区| 国产拳头交一区二区| 理论亚洲区美一区二区三区| 亚洲av无码一区二区三区四区 | 国产精品一区12p| 波多野结衣一区二区三区高清av| 无码国产精品一区二区免费 | 福利一区在线视频| 伊人久久大香线蕉av一区| 视频精品一区二区三区| 糖心vlog精品一区二区三区| 欲色aV无码一区二区人妻| 无码国产精品一区二区免费式芒果| 亚洲一区无码精品色| 色综合视频一区二区三区 | 久久精品一区二区影院| 中文字幕一区二区三区永久 | 国产伦精品一区二区三区视频猫咪 |