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 成为根视图。
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 成为根视图。