我正在使用 Caliburn Micro 开发 WPF 应用程序。此应用程序的一些视图需要在 AutoCAD 环境中加载。AutoCAD 编程环境允许开发 AutoCAD 插件(dll 类型)并将它们加载到 AutoCAD 环境中。
由于 AutoCAD 插件类型(dll),插件没有应用程序对象,因此必须为此自定义引导程序。根据此处的 Caliburn Micro 文档(向下滚动到“在 Office 和 WinForms 应用程序中使用 Caliburn.Micro”),我们可以继承非通用引导程序并将“false”传递给基本构造函数的“useApplication”参数。因此,我继续创建了自定义引导程序。
问题是 ConfigureContainer() 覆盖永远不会被调用,也没有任何东西被初始化。另外,我不确定如何使用 ViewModel 第一个概念加载 ShellView。这是我到现在为止的一些代码。
引导程序
public class AutocadMefBootStrapper : Bootstrapper {
private CompositionContainer container;
private ElementHost host;
public AutocadMefBootStrapper(ElementHost host) : base(false) {
this.host = host;
}
protected override void Configure() { //Not getting invoked.
...
var rootViewModel = container.GetExportedValue<IShell>();
var rootView = ViewLocator.LocateForModel(rootViewModel, null, null);
host.Child = rootView;
}
}
我有一个 AutoCAD 在请求时加载的 Windows 窗体。在 Windows 窗体的加载事件中,我创建了一个实例定制的 caliburn 微型引导程序,并期望引导程序完成所有的魔法并加载 Shell。但壳牌不加载。我在 AutoCAD 中显示空白窗口。下面是 Windows 窗体的编码方式。
public partial class WinFormHost : Form {
private void WinFormHost_Load(object sender, EventArgs e) {
ElementHost host = new ElementHost();
host.Dock = DockStyle.Fill;
Controls.Add(host);
AutocadMefBootStrapper bootStrapper = new AutocadMefBootStrapper(host);
}
}
这是我的 ShellView
<UserControl x:Class="RelayAnalysis_Autocad.Views.ShellView"
...
<Grid>
<TextBlock>Hello There</TextBlock>
</Grid>
</UserControl>
和 ShellViewModel
[Export(typeof(IShell))]
public class ShellViewModel : Conductor<object>, IShell {
protected override void OnActivate() {
base.OnActivate();
}
}
总而言之,我正在尝试在未使用 Application 对象加载的托管环境中使用 Caliburn Micro。我无法配置 Caliburn Micro,因为 ShellView 永远不会加载。