我的Prism / WPF应用程序中似乎有关于自举工作流程的鸡蛋问题。
如果注册取决于用户选项,那么如何在IoC容器中注册组件,并且需要在启动时收集这些用户选项,这需要UI工作流,这需要从容器解析的服务,这需要要配置的容器?
这似乎是一个悖论。但好吧,我想我可以将我的容器注册分为两个阶段,并有一个这样的启动程序:
UnityBootstapper
)并创建容器CreateShell()
和InitializeShell()
做他们典型的事情并解析shell窗口并显示它。这似乎应该可行。但是,我觉得必须有更好的方法。是否应首先显示shell(甚至只是带有标题栏和漂亮壁纸图像的占位符),并在顶部显示启动工作流对话框?当然这意味着在创建shell之后必须有第二阶段的容器注册 ......现在看来PRISM标准更进一步。
PRISM或WPF / MVVM中的一些最佳实践将非常受欢迎。
答案 0 :(得分:0)
我认为这更像是依赖注入的问题,而不是特定的框架。
考虑一下:
你有一些UI ViewModel
public class SomeUIVM
{
ctor(IDependency iNeedThis){...}
}
如果用户需要class DepA : IDependency
或class DepB : IDependency
,则需要用户进行选择。
通过在启动时注册此类来重新设置您的设置:
public class SpecificDependencyProvider : IDependencyProvider
{
public IDependency SelectedDependency {get;set;}
}
然后SomeUIVM
的构造函数接受IDependencyProvider
并访问SelectedDependency
属性。选择UI也会使用IDependencyProvider
并设置SelectedDependency
。