东北大学全栈开发课程笔记2

技术上如何访问Web服务?

架构上如何添加Model?

MVVM+IService

思路:

1. IService帮助VM干活:创建ITokenService接口,生成Model

2. 构建接口的实现TokenService

3. 如何将VM和IService关联起来?创建参数为IService的VM构造函数

4. 在VMLocator中注册IService

  • Token.cs

    public class Token
    {//Model层:数据
        public string status { get; set; }
        public string data { get; set; }
    }
  • 接口ITokenService.cs

    public interface ITokenService
    {//生成Model
        Task<Token> GetTokenAsync();//async函数返回值必须是Task
        
    }
  • 接口的实现TokenService.cs

    public class TokenService :ITokenService
    {
        public async Task<Token> GetTokenAsync()
        {//TokenService具体实现
            var httpClient = new HttpClient();
            var response =
                await httpClient.GetAsync("https://v2.jinrishici.com/token");//访问网址
            var json = await response.Content.ReadAsStringAsync();//响应的内容读成字符串json
​
            return JsonConvert.DeserializeObject<Token>(json);//把json反序列化为Token
        }
    }
  • MainPageViewModel.cs

    public class MainPageViewModel : ViewModelBase
    {
        private string _result;
​
        public string Result
        {
            get => _result;
            set => Set(nameof(Result), ref _result, value);
        }
        
        private Token _token;
​
        public Token Token
        {
            get => _token;
            set => Set(nameof(Token), ref _token, value);
        }
​
        private RelayCommand _clickMeCommand;
​
        public RelayCommand ClickMeCommand =>
            _clickMeCommand ?? (_clickMeCommand = 
                new RelayCommand(() => Result = "Hello World!"));
        
****************************************************************************************
        // MVVM + IService(帮ViewModel干活)
        private RelayCommand _getTokenCommand;
        
        public RelayCommand GetTokenCommand =>
            _getTokenCommand ?? (_getTokenCommand =
                new RelayCommand(async() =>//async函数一定要带await
                {//使用TokenService帮ViewModel干活
                    Token = await _tokenService.GetTokenAsync();
                }));
​
        public MainPageViewModel(ITokenService tokenService)
        {//创建参数为ITokenService的构造函数:保证ViewModel一定能拿到TokenService
            _tokenService = tokenService;
        }
​
        private ITokenService _tokenService;
    }
  • ViewModelLocator.cs

    public class ViewModelLocator
    {
        public MainPageViewModel MainPageViewModel =>
            SimpleIoc.Default.GetInstance<MainPageViewModel>();
        
        public ViewModelLocator()
        {//因为ViewModel是从ViewModelLocator里拿的,所以ViewModel需要的ITokenService也需要注册在Locator里
            SimpleIoc.Default.Register<MainPageViewModel>();//注册MainPageViewModel
****************************************************************************************
            SimpleIoc.Default.Register<ITokenService,TokenService>();//注册ViewModel需要的ITokenService
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值