SuperAPI AI 工具集

mvvm-toolkit-di

通用与其它

查看项目

更新于 10-16 05:49

技能介绍

用途:为使用 CommunityToolkit.Mvvm 的 XAML 应用(WPF、WinUI 3、MAUI、Uno、Avalonia)搭建依赖注入组合根,把 ViewModel 与服务注册进 Microsoft.Extensions.DependencyInjection。MVVM Toolkit 本身不提供容器,需与该容器配合。

主要能力:推荐用 Host.CreateDefaultBuilder() 在启动时构建一次服务提供程序,注册服务与 ViewModel,并通过构造函数注入。可配置 appsettings.json、日志、IHostedService 后台任务,并在开发构建中启用作用域校验。也可只用 ServiceCollection 与 BuildServiceProvider() 构建轻量容器。

生命周期:AddSingleton 用于 Shell/主窗口 VM、设置、文件/HTTP 服务、共享 IMessenger 与全局缓存;AddTransient 用于每页或每文档的 ViewModel;AddScoped 在客户端较少用,适合显式 IServiceScope(如每窗口作用域)。

用法要点:在视图代码隐藏中解析页面根 ViewModel,再由其自行拉取依赖;XAML 用 {x:Bind ViewModel.Xxx} 或 {Binding Xxx} 绑定。导航框架(WinUI 3 Frame.Navigate、MAUI Shell、Prism、MVVMCross)应让框架解析页面。IMessenger 注册一次后注入,如 services.AddSingleton<IMessenger>(WeakReferenceMessenger.Default)。.NET 8+ 可用 AddKeyedSingleton 与 [FromKeyedServices] 按 key 解析同一接口的不同实现。构造函数注入便于用 Moq 等替换依赖做单元测试。

限制与陷阱:避免在用户代码中使用 Ioc.Default.GetService<T>(),它仅作为无法构造函数注入时的逃生通道(设计时数据、ValueConverter、控件模板)。不要把每文档 VM 注册为单例;不要多次调用 BuildServiceProvider();不要长期持有 IServiceProvider;开发环境应启用作用域校验;不要从根提供程序解析作用域服务。WPF 与 Windows Forms 需将宿主生命周期与应用生命周期集成。

资料未提供具体收费、价格与平台支持细节。