gpt4 book ai didi

CommunityToolkit.Mvvm8.1IOC依赖注入控制反转(5)

转载 作者:我是一只小鸟 更新时间:2023-04-14 22:31:22 32 4
gpt4 key购买 nike

  。

本系列文章导航
  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
{
    /// <summary>
    /// Gets the current <see cref="App"/> instance in use
    /// </summary>
    public new static App Current => ( App ) Application.Current;

    /// <summary>
    /// Gets the <see cref="IServiceProvider"/> instance to resolve application services.
    /// </summary>
    public IServiceProvider Services
    {
        get;
    }

    public App ()
    {
        Services = ConfigureServices();

        this.InitializeComponent();
    }

    private static IServiceProvider ConfigureServices ()
    {
        var services = new ServiceCollection();

        //   注册Services
        services.AddSingleton<IOCDemo.Service.Repository.IBill , IOCDemo.Service.Repository.BillService>();
        services.AddSingleton<IOCDemo.Service.Service.IBill , IOCDemo.Service.Service.BillService>();
        //services.AddSingleton<ISettingsService , SettingsService>();


        //  注册Viewmodels
        // 不是每个Viewmodels都得来AddTransient,如果Viewmodels不需要ioc,可以不用这里注册
        services.AddTransient<IOCDemo.ViewModels.WindowViewModel1>();

        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<WindowViewModel1>();  

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

  。

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<WindowViewModel1>();

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

  。

  。

  。

  。

自我Demo地址

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

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

  。

1 。

  。

最后此篇关于CommunityToolkit.Mvvm8.1IOC依赖注入控制反转(5)的文章就讲到这里了,如果你想了解更多关于CommunityToolkit.Mvvm8.1IOC依赖注入控制反转(5)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com