码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)


     

    本系列文章导航
    1. https://www.cnblogs.com/aierong/p/17300066.html
    2. https://github.com/aierong/WpfDemo (自我Demo地址)


    希望提到的知识对您有所提示,同时欢迎交流和指正
    作者:aierong
    出处:https://www.cnblogs.com/aierong

     

     

    说明

    CommunityToolkit.Mvvm包不提供ioc功能,但是官方建议使用:Microsoft.Extensions.DependencyInjection使用IOC

     

    安装

    nuget:Microsoft.Extensions.DependencyInjection 包

     

    接口和服务的定义实现

    public interface IBill
    {
    bool IsExistId ( string name );
    string GetData ( string name );
    }
    public class BillService : IBill
    {
    public string GetData ( string name )
    {
    return string.Format( "name:{0}" , name );
    }
    public bool IsExistId ( string name )
    {
    return name == "qq";
    }
    }

     

    App.xaml.cs注册

    public partial class App : Application
    {
    ///
    /// Gets the current instance in use
    ///
    public new static App Current => ( App ) Application.Current;
    ///
    /// Gets the instance to resolve application services.
    ///
    public IServiceProvider Services
    {
    get;
    }
    public App ()
    {
    Services = ConfigureServices();
    this.InitializeComponent();
    }
    private static IServiceProvider ConfigureServices ()
    {
    var services = new ServiceCollection();
    // 注册Services
    services.AddSingleton();
    services.AddSingleton();
    //services.AddSingleton();
    // 注册Viewmodels
    // 不是每个Viewmodels都得来AddTransient,如果Viewmodels不需要ioc,可以不用这里注册
    services.AddTransient();
    return services.BuildServiceProvider();
    }
    }

     

    view中使用

    原有的view与viewmodel的绑定方式改变如下:

    public partial class Window1 : Window
    {
    public Window1 ()
    {
    InitializeComponent();
    // this.DataContext = new WindowViewModel1(); 这样不可以使用了,请用App.Current.Services.GetService
    this.DataContext = App.Current.Services.GetService();
    //代码任何处,都可以使用App.Current.Services.GetService获取到服务
    //IFilesService filesService = App.Current.Services.GetService();
    }
    }

     

    viewmodel中使用

    vm的构造函数中注入服务即可

    readonly Service.Service.IBill _IBill;
    public WindowViewModel1 ( Service.Service.IBill iBill )
    {
    this._IBill = iBill;
    }
    [RelayCommand( CanExecute = nameof( CanButton ) )]
    void ButtonClick ()
    {
    //点击按钮,修改标题
    if ( this._IBill.IsExistId( Title ) )
    {
    Title = "qq" + this._IBill.GetData( Title );
    }
    else
    {
    Title = "qq";
    }
    }

     

     

    代码中获取服务的方式

    this.DataContext = App.Current.Services.GetService();
    //代码任何处,都可以使用App.Current.Services.GetService获取到服务
    IFilesService filesService = App.Current.Services.GetService();

     

     

     

     

    自我Demo地址:

    https://github.com/aierong/WpfDemo/tree/main/WpfDemoNet6/IOCDemo

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    1

     

  • 相关阅读:
    SQLServer统计监控SQL执行计划突变的方法
    使用HTML制作静态网站:传统文化戏剧锡剧带psd设计图(2个页面)
    UG NX二次开发(C++)-采用NXOpen方法计算体的质心
    ruoyi菜单折叠,菜单收缩
    【c++百日刷题计划】 ———— DAY4,带你轻松学习算法
    【网络服务&数据库教程】10 MySQL 基础
    《架构风清扬-Java面试系列第27讲》Java中如何正确优雅关闭线程?
    哈工大李治军老师操作系统笔记【12】:CPU调度策略(Learning OS Concepts By Coding Them !)
    第二章计算机网络参考模型
    全自动备份文件:数据安全新卫士
  • 原文地址:https://www.cnblogs.com/aierong/p/17318614.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号