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

    主站蜘蛛池模板: 日韩a无吗一区二区三区| 一区三区三区不卡| 国产亚洲一区二区三区在线不卡| 中文字幕日本一区| 亚洲国产欧美一区二区三区| 国产AV一区二区三区传媒| 日本丰满少妇一区二区三区| 日韩欧美一区二区三区免费观看| 亚洲一区二区三区在线观看精品中文 | 国产色综合一区二区三区| 精品免费AV一区二区三区| 国模吧一区二区三区精品视频| 99精品一区二区三区| 性无码一区二区三区在线观看| 清纯唯美经典一区二区| 中文字幕精品一区二区三区视频| 免费无码AV一区二区| 人成精品视频三区二区一区 | 2022年亚洲午夜一区二区福利| 国产一区二区精品久久凹凸| 亚洲性日韩精品国产一区二区| 一区二区三区精品高清视频免费在线播放 | 亚洲福利视频一区| 中文字幕精品一区二区日本| 无码人妻一区二区三区在线视频| 蜜桃传媒视频麻豆第一区| 无码乱人伦一区二区亚洲| 日本伊人精品一区二区三区| 精品人妻一区二区三区浪潮在线| 亚洲一区在线视频观看| 亚洲AV无码一区二区三区电影 | 精品久久久中文字幕一区 | 久久久91精品国产一区二区| 亚洲国产美国国产综合一区二区| 麻豆一区二区在我观看| 无码中文人妻在线一区| 国产伦理一区二区三区| 超清无码一区二区三区| 精品一区二区三区东京热| 无码日韩精品一区二区免费| 日本精品视频一区二区三区|