如何使用 MVVM 解决 WPF 中的 Simple Injector 错误 "the instance is requested outside the context of an active (Async Scoped) scope"?

How to solve the Simple Injector error "the instance is requested outside the context of an active (Async Scoped) scope" in WPF with MVVM?

我有用 WPF 和 MVVM 编写的应用程序,我使用简单注入器作为 IoC 容器。我的主视图模型有构造函数,因为我注入了 bll class:

public MainWindowViewModel(IReviewBodyBLL reviewBodyBLL)
{
    this.reviewBodyBLL = reviewBodyBLL;

并且这个视图模型是在 MainWindow 中设置的:

public partial class MainWindow : Window
{
    public MainWindow(MainWindowViewModel viewModel)
    {
        InitializeComponent();

        base.DataContext = viewModel;

并且所有 classes 都已注册:

container.Register<IFreewayReviewCreatorDbContext, FreewayReviewCreatorDbContext>(Lifestyle.Scoped);
container.Register<IUnitOfWorkFactory, UnitOfWorkFactory>(Lifestyle.Scoped);
container.Register<IUnitOfWork, UnitOfWork>(Lifestyle.Scoped);
container.Register<IReviewBodyBLL, ReviewBodyBLL>(Lifestyle.Transient);

// Register your windows and view models:
container.Register<MainWindow>();
container.Register<MainWindowViewModel>();

当我尝试 运行 应用程序时出现错误:

Exception thrown: 'SimpleInjector.ActivationException' in SimpleInjector.dll

The program '[28028] FreewayReviewCreator.exe' has exited with code 0 (0x0).

应用程序停止,没有任何中断。

当我从主视图模型构造函数中删除时 IReviewBodyBLL reviewBodyBLL 应用程序正确启动。如何将bll注入到构造函数中?

对于 WPF 应用程序,您可以同时打开多个 windows,其中每个 window 应该 运行 在其自己的范围内,Simple Injector 的 ambient scoping model 将不起作用,因为不清楚何时处理单个范围,因为通常总会有一个 window 打开。

相反,您可以使用 Simple Injector 的 "flowing" 范围模型,如 this Q/A about Win Forms 中所述。这对 WPF 也是一样的。