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

    主站蜘蛛池模板: 亚洲一区二区三区乱码在线欧洲| 国产一区二区三区在线观看免费| 性无码免费一区二区三区在线 | 亚洲色偷精品一区二区三区| 日韩一区二区超清视频| 最新欧美精品一区二区三区| 国99精品无码一区二区三区| 国产成人精品一区二三区在线观看| 亚洲一区AV无码少妇电影| 欧洲无码一区二区三区在线观看 | 久久精品无码一区二区日韩AV| 加勒比无码一区二区三区| 国产区精品一区二区不卡中文| 国产天堂一区二区综合| 中文无码精品一区二区三区 | 国产一区二区三区国产精品| 日韩中文字幕一区| 麻豆AV一区二区三区| 无码精品一区二区三区在线| 久久无码精品一区二区三区| 日韩av片无码一区二区三区不卡| 夜夜高潮夜夜爽夜夜爱爱一区| 在线观看日本亚洲一区| 一区二区三区在线观看| 国产精品视频一区二区猎奇| 中文字幕AV一区二区三区| 亚洲a∨无码一区二区| 亚洲AV无码一区二区三区网址| 麻豆一区二区免费播放网站| 学生妹亚洲一区二区| 五十路熟女人妻一区二区| 无码精品一区二区三区| 国产一区二区三区乱码在线观看| 国产乱人伦精品一区二区在线观看| 亚洲av色香蕉一区二区三区| 国产伦精品一区二区三区免费下载| 国产一区二区三区无码免费| 国产成人精品久久一区二区三区av | 亚洲AV无码片一区二区三区| 国产Av一区二区精品久久| 小泽玛丽无码视频一区|