我想创建一个 WPF 或 Silverlight 模块,它不仅可以被 Shell 的引导程序使用,还可以嵌入到非 PRISM 应用程序中。
简而言之,有没有一种方法可以从模块本身初始化 PRISM 模块,而不是从 Shell 初始化?
Ulimate 的目标是拥有 WPF/Silverlight PRISM 模块,可以由非 PRISM 应用程序初始化。
我想创建一个 WPF 或 Silverlight 模块,它不仅可以被 Shell 的引导程序使用,还可以嵌入到非 PRISM 应用程序中。
简而言之,有没有一种方法可以从模块本身初始化 PRISM 模块,而不是从 Shell 初始化?
Ulimate 的目标是拥有 WPF/Silverlight PRISM 模块,可以由非 PRISM 应用程序初始化。
这没有障碍。
该IModule
接口有一个单一的无参数void
方法:Initialize()
.
非棱镜应用程序可以通过调用该方法来初始化模块。而已。
如果另一个应用程序具有不同的插件系统,具有不同的接口,则您的模块也可以实现该接口,并且该接口使用的任何初始化方法的主体都可以简单地调用Initialize()
,反之亦然。
例如:
public interface IMyPluginModule
{
void StartModule();
}
public class MyModule : IModule, IMyPluginModule
{
public void Initialize()
{
// actual initialization code here
}
public void StartModule()
{
Initialize();
}
}
它比乍一看要复杂一些,但它是可行的。我不知道你是否正在使用 Prism 4,但如果是这样,微软实际上为这种情况提供了指导:
http://msdn.microsoft.com/en-us/library/ff921109(v=PandP.40).aspx
您需要做一些项目操作才能让两个项目并排运行。如果您需要查看工作示例,则 Prism v4 包含一个名为“MultiTargeting”的示例。
但是,您关于允许模块自行初始化而不是编排 Shell / Bootstrapper 的问题是错误的方法。本质上,您将拥有两个 shell……一个 WPF 和一个 Silverlight。看看样本,看看你的想法。
希望这可以帮助。