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

    主站蜘蛛池模板: 久久精品人妻一区二区三区| 一本色道久久综合一区| 国产精品合集一区二区三区| 最新中文字幕一区二区乱码 | 亚洲色精品三区二区一区| 国产伦精品一区二区三区免费迷| 91精品一区二区| 秋霞午夜一区二区| 一区二区三区观看| 国产一区二区影院| 日美欧韩一区二去三区 | 欧洲精品无码一区二区三区在线播放| 亚洲AV成人精品一区二区三区| 亚洲AV无码一区二区二三区软件| 一区二区3区免费视频| 国产人妖视频一区二区破除| 理论亚洲区美一区二区三区| 国内精品视频一区二区三区| 国模大胆一区二区三区| 日韩视频在线一区| 国产产一区二区三区久久毛片国语 | 亚洲第一区精品日韩在线播放| 国产丝袜一区二区三区在线观看| 在线观看一区二区三区视频| 无码人妻av一区二区三区蜜臀 | 久久一区二区明星换脸| 国产成人精品一区二区秒拍| 亚洲AV综合色区无码一区| 亚洲AV综合色区无码一区| 亚洲一区二区影院| 亚洲精品无码一区二区| 欧美一区内射最近更新| 国产成人av一区二区三区不卡| 色综合一区二区三区| 中文字幕一区二区区免| 国产日韩一区二区三区在线观看 | 国产精品无码一区二区三区不卡 | 国产一区二区在线视频播放| 一区二区三区视频在线播放| 久久精品国产一区| 中文字幕在线不卡一区二区|