.NET 8 WPF应用中Fluxor的IState注入失败问题求助
解决WPF中Fluxor IState注入为Null的问题
问题根源
你直接从ServiceCollection手动解析Store并初始化的方式,跳过了Fluxor依赖注入的完整初始化流程,导致IState<T>这类依赖没有被正确注册到容器中,进而注入时为null。而IDispatcher是Singleton且注册逻辑更简单,所以能正常注入。
修复步骤
1. 调整DI注册与初始化顺序
所有服务(包括Fluxor和业务服务)必须先完成注册,再构建ServiceProvider,最后从Provider中获取IStore进行初始化。
修改后的App.xaml.cs代码:
var coll = new ServiceCollection(); // 先注册Fluxor coll.AddFluxor(o => o.ScanAssemblies(typeof(ModelState).Assembly)); // 再注册业务服务 coll.AddScoped<IPricingService, PricingService>(); // 构建完整的ServiceProvider var serviceProvider = coll.BuildServiceProvider(); // 从Provider获取Store并初始化 var store = serviceProvider.GetRequiredService<IStore>(); store.InitializeAsync().Wait(); // 若使用异步上下文可改用await
2. 正确获取Scoped服务
由于IState<T>是Scoped生命周期,WPF没有内置Scope管理,需要手动创建Scope来获取业务服务:
using (var scope = serviceProvider.CreateScope()) { var pricingService = scope.ServiceProvider.GetRequiredService<IPricingService>(); // 在此使用pricingService,此时IState<PricingState>会被正确注入 }
原理说明
Fluxor的AddFluxor扩展会自动注册IState<T>、IStore等核心服务,但这些服务的实例化依赖ServiceProvider的完整构建流程。直接从ServiceCollection解析Store会绕过DI容器的依赖解析逻辑,导致IState<T>的实例无法被正确创建和注入。
内容的提问来源于stack exchange,提问作者Nick Leuchtenberg
相关产品推荐
相关产品推荐

