我在通过MEF连接的单独dll文件中有UI应用扩展。我的问题是,如果他们有一个对话框(WPF用户控件),我应该将对话框作为扩展的属性,如下所示:
public UserControl ExtDialog { get; set; }
或者我应该将它们装入包装uri?
public string ExtDialogUri { get; set; }
我倾向于uri,但不确定它是否真的有效。这种方式更“推荐”的方式是什么?
注意:这些对话框将导航到NavigationService.Navigate();方法
答案 0 :(得分:4)
我不会使用这两个选项。问题是这两种方法在创建对话框时缺乏灵活性。如果使用第一种方法,则无论是否需要,都将始终创建对话框。使用pack url的问题是扩展将无法控制如何创建对话框的实例。如果控件需要在创建后初始化(需要创建视图模型等),该怎么办?
在我看来,最好公开一个用于创建对话框的工厂:
public IExtDialogFactory ExtDialogFactory { get; set; }
public interface IExtDialogFactory
{
UserControl CreateDialog();
}