【问题标题】:Bootstrapper design pattern using Caliburn.Micro MVVM framework with IoC-container使用带有 IoC 容器的 Caliburn.Micro MVVM 框架的引导程序设计模式
【发布时间】:2015-05-16 15:09:32
【问题描述】:

WPF 应用程序使用 Caliburn.Micro 作为 MVVM 框架。 CM 内置在名为 SimpleContainer 的 IoC-Container 中,我将其替换为 Castle.Windsor 容器。 (但我猜这里容器类型无关紧要。) CM 使用Bootstrapper.Configure() 方法来配置容器。之后,Bootstrapper.OnStartup() 方法启动应用程序,显示根 ViewModel 的视图。所以容器在第一个视图出现之前进行配置。在我的情况下,容器配置非常复杂,可能会导致错误。例如,我想将一些 XML 文件从 app 目录反序列化为对象,并将它们注册为容器中的组件。所以我想获得一个 SplashScreen 来查看容器配置进度,然后如果一切正常,则启动画面消失,容器解析根项目,应用程序按预期启动。如果不是 - 启动画面上显示的问题。在获得配置的容器之前,我不知道如何获得SplashScreenView(绑定到SplashScreenViewModel)。因此应用程序分为“之前”和“之后”容器。怎样才能解决这个问题?有没有图案?在解决了一些组件之后,可以在Configure 中部分配置容器,部分在其他地方配置容器吗?或者也许有使用由另一个容器实例解析的容器实例“内部”组件的实践?谢谢。

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>();
        }
    }

【问题讨论】:

    标签: c# wpf design-patterns mvvm caliburn.micro


    【解决方案1】:

    WPF 有一个内置的(我不知道它是如何工作的)启动画面。只需在您的项目中使用“添加新项目”即可。它确实适用于 Caliburn。

    这只是一个简单的位图,但它会照顾外观。您可以将错误作为普通数据处理。

    无论如何,您都不希望您的启动窗口成为根视图。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2010-12-24
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2013-08-24
      • 2013-08-26
      相关资源
      最近更新 更多