You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:56:11