0

我有一个基于 Caliburn Micro 框架的桌面应用程序。一切都很好。现在我正在尝试将相同的应用程序作为插件移植到 Outlook 中。

在桌面应用程序中,根据 app.xaml 中的条目,Caliburn 知道在哪里可以找到引导程序并对其进行实例化。

对于 Outlook 插件,我创建了一个重写的引导程序,我在 ThisAddIn.ThisAddIn_Startup() 中显式地实例化它。这当然不使用 Application 对象。

我什至可以使用与此类似的代码调用特定视图

var windowManager = IoC.Get<IWindowManager>();
windowManager.ShowDialog(new MyViewModel());

这将导致与视图模型关联的视图显示在 Outlook 顶部的模式窗口中(因此验证 Caliburn Micro 能够从我的 Outlook 插件中的视图模型中找到视图)

我还没有弄清楚如何实例化 Shell,以便我可以开始使用它的功能。

我的期望是,由于我的引导程序派生自 BootStrapper,并且我已使用 MEF 容器将我的 shell 视图模型实现注册为导出 IShell,Caliburn 将自动实例化 shell 视图模型并开始使用它。那没有发生。

我的目标是将外壳加载到我的插件的任务窗格中,作为我将根据用户操作加载的其他视图的容器。

关于如何让它发挥作用的任何想法或提示?一般来说,是否有人在 Outlook 或 Office 插件的任务窗格中加载了 shell 实现?

谢谢!

4

1 回答 1

2

你的意思是通过Bootstrapper<Shell>. 这使用了下面的窗口管理器,但我认为这不会扩展到 Outlook。没有什么可以阻止您使用上面相同的代码手动初始化 shell,组合将处理应用程序的其余部分。

IoC.Get,默认情况下会调用Activator.CreateInstance,因此您的问题可能出在 MEF 上。驱动打开 Shell 的方法DisplayRootViewFor()调用此行。

 windowManager.ShowWindow(IoC.GetInstance(viewModelType, null), null, settings);

如果 MEF 未正确连接,它将失败,导致您的 shell 无法加载。

于 2013-05-29T08:20:05.210 回答