CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)
|
本系列文章导航
希望提到的知识对您有所提示,同时欢迎交流和指正
作者: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
A.Sql Server2005 Transact-SQL 新兵器学习
B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex
希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!
来源:https://www.cnblogs.com/aierong/archive/2023/04/14/17318614.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-4-14 23:30:01
举报
回复
分享
|
|
|
|