【发布时间】: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