如何在Outlook任务窗格中实例化实现Caliburn Micro的IShell接口的窗口/视图

时间:2013-05-28 20:26:30

标签: wpf outlook-addin caliburn.micro

我有一个基于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派生自BootStrapper,并且我已经将MEF容器的shell视图模型实现注册为导出IShell,所以Caliburn将自动实例化shell视图模型并开始使用它。那没有发生。

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

有关如何使其发挥作用的任何想法或提示?通常,有人在Outlook或Office插件的任务窗格中加载了shell实现吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

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