Bootstrapper 设计模式使用 Caliburn.Micro MVVM 框架和 IoC 容器

Bootstrapper design pattern using Caliburn.Micro MVVM framework with IoC-container

WPF 应用程序使用 Caliburn.Micro 作为 MVVM 框架。 CM 内置了名为 SimpleContainer 的 IoC-Container,我将其替换为 Castle.Windsor 容器。 (但我猜容器类型在这里并不重要。) CM 使用 Bootstrapper.Configure() 方法可以配置容器。之后 Bootstrapper.OnStartup() 方法启动应用程序显示根 ViewModel 的视图。所以容器在第一个视图出现之前配置。在我的例子中,容器配置非常复杂,可能会导致错误。例如,我想将一些 XML 文件从 app 目录反序列化为对象,并将它们注册为容器中的组件。所以我想获得一个 SplashScreen 来查看容器配置进度,然后如果一切正常,启动消失,容器解析根项并且应用程序按预期启动。如果不是 - 闪屏上显示的问题。在获得配置的容器之前,我不记得如何获得 SplashScreenView(绑定到 SplashScreenViewModel)。所以应用程序在 "before" 和 "after" 容器上划分。如何解决这个问题?有什么模式吗?是否可以在 Configure 中部分配置容器并在其他地方部分配置容器,在它解决了一些组件之后?或者也许有使用容器实例 "inside" 由另一个容器实例解析的组件的做法?谢谢。

public class CastleModernUIBootstrapper : BootstrapperBase
    {
        private WindsorContainer _container;
        public CastleModernUIBootstrapper()
        {
            Initialize();
        }
        protected override void Configure()
        {
            _container = new WindsorContainer();
            // here components are registered. 
            // I want perform complex container configuration here,
            // but I can't vizualize what happens here.
            _container.Register(Component.For<LoadingSplashScreenViewModel>());
            // ...
        }
        // ...
        protected override void OnStartup(object sender, StartupEventArgs e)
        {
            // after we resolving first element from container
            DisplayRootViewFor<LoadingSplashScreenViewModel>();
        }
    }

WPF 有一个内置的(因为我不知道它是如何工作的)启动画面。只需在您的项目中使用 "Add new item"。它确实适用于 Caliburn。

这只是一个简单的位图,但它处理了外观问题。您可以将错误作为正常数据处理。

您无论如何都不希望您的 Splash window 成为根视图。