我有一个基于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实现吗?
谢谢!
答案 0 :(得分:2)
您的意思是通过Bootstrapper<Shell>
进行实例化。这使用了下面的窗口管理器,但我不认为这扩展到了outlook。没有什么可以阻止你使用上面相同的代码手动初始化你的shell,组合将处理应用程序的其余部分。
IoC.Get,默认情况下会调用Activator.CreateInstance
,因此问题可能出在MEF上。驱动打开Shell DisplayRootViewFor()
的方法会调用此行。
windowManager.ShowWindow(IoC.GetInstance(viewModelType, null), null, settings);
如果没有正确连接MEF,它将失败导致你的shell无法加载。