如何在Prism WPF应用程序中干净地实现启动UI工作流程?

时间:2016-06-27 14:15:48

标签: wpf prism

我的Prism / WPF应用程序中似乎有关于自举工作流程的鸡蛋问题。

如果注册取决于用户选项,那么如何在IoC容器中注册组件,并且需要在启动时收集这些用户选项,这需要UI工作流,这需要从容器解析的服务,这需要要配置的容器?

这似乎是一个悖论。但好吧,我想我可以将我的容器注册分为两个阶段,并有一个这样的启动程序:

  1. 启动PRISM Bootstrapper(例如UnityBootstapper)并创建容器
  2. 注册启动工作流所需的组件
  3. 显示UI对话框工作流程并收集用户选项/设置
  4. 根据刚收集的设置,在容器中注册剩余的应用程序组件
  5. CreateShell()InitializeShell()做他们典型的事情并解析shell窗口并显示它。
  6. 这似乎应该可行。但是,我觉得必须有更好的方法。是否应首先显示shell(甚至只是带有标题栏和漂亮壁纸图像的占位符),并在顶部显示启动工作流对话框?当然这意味着在创建shell之后必须有第二阶段的容器注册 ......现在看来PRISM标准更进一步。

    PRISM或WPF / MVVM中的一些最佳实践将非常受欢迎。

1 个答案:

答案 0 :(得分:0)

我认为这更像是依赖注入的问题,而不是特定的框架。

考虑一下:

你有一些UI ViewModel

public class SomeUIVM
{
   ctor(IDependency iNeedThis){...}
}

如果用户需要class DepA : IDependencyclass DepB : IDependency,则需要用户进行选择。

通过在启动时注册此类来重新设置您的设置:

public class SpecificDependencyProvider : IDependencyProvider
{
  public IDependency SelectedDependency {get;set;}
}

然后SomeUIVM的构造函数接受IDependencyProvider并访问SelectedDependency属性。选择UI也会使用IDependencyProvider并设置SelectedDependency