.NET 7.0 Uno+ReactiveUI可用标准启动项目及更新文档求助
.NET 7.0 Uno Platform + ReactiveUI 全平台启动应用搭建方案
核心依赖修正(解决文档过时问题)
- 替换过时NuGet包:原文档中的
ReactiveUI.UnoUI已不再适配新版Uno的WinUI架构,必须替换为**ReactiveUI.Uno.WinUI** - 补充必要依赖:同时安装
ReactiveUI.Fody(简化INotifyPropertyChanged实现)和Microsoft.Extensions.Hosting(用于依赖注入配置)
标准IHost与依赖注入配置
在项目根App.xaml.cs中完成Host初始化与ReactiveUI服务注册,这是统一全平台DI的关键:
protected override void OnLaunched(LaunchActivatedEventArgs args) { var host = Host.CreateDefaultBuilder() .ConfigureServices(services => { // 注册ReactiveUI核心服务 services.AddReactiveUI(); // 注册自定义视图模型 services.AddTransient<MainViewModel>(); }) .Build(); host.Start(); // 初始化窗口(保留Uno原生窗口逻辑) var window = new MainWindow(); window.Activate(); }
全平台(含WebAssembly)适配要点
WASM平台额外配置
在WASM项目的Program.cs中补充ReactiveUI服务注册:
var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); // 添加ReactiveUI服务 builder.Services.AddReactiveUI(); await builder.Build().RunAsync();
视图-视图模型绑定规范
使用ReactiveUI的WhenActivated模式处理生命周期绑定,避免内存泄漏:
public sealed partial class MainPage : Page, IViewFor<MainViewModel> { public MainPage() { this.InitializeComponent(); // 通过DI获取视图模型(或直接实例化) ViewModel = App.Current.Services.GetRequiredService<MainViewModel>(); this.WhenActivated(disposables => { // 绑定示例:将视图模型的Greeting属性绑定到TextBlock this.OneWayBind(ViewModel, vm => vm.Greeting, v => v.GreetingTextBlock.Text) .DisposeWith(disposables); }); } public MainViewModel ViewModel { get; set; } object IViewFor.ViewModel { get => ViewModel; set => ViewModel = (MainViewModel)value; } }
避坑注意事项
- 不要依赖旧版
ReactiveUI.Samples示例,直接基于Uno官方.NET7模板搭建项目后引入最新ReactiveUI包 - 确保所有平台项目的NuGet包版本统一,尤其是Uno SDK和ReactiveUI相关包
- WASM平台可启用AOT编译(项目属性中配置),解决部分运行时兼容性问题
内容的提问来源于stack exchange,提问作者kyurkchyan
相关产品推荐
相关产品推荐

