我在通过 MEF 连接的单独的 dll 文件中有 UI 应用程序扩展。我的问题是,如果他们有一个对话框(WPF 用户控件),我是否应该像这样将对话框作为扩展的属性:
public UserControl ExtDialog { get; set; }
还是应该将它们加载到包 uri 中?
public string ExtDialogUri { get; set; }
我倾向于 pack uri,但不确定它是否真的有效。哪种方式更“推荐”?
注意:将使用 NavigationService.Navigate(); 导航到这些对话框;方法。
最佳答案
我不会使用这两个选项。问题是这两种方法在创建对话框的时间方面都缺乏灵 active 。如果使用第一种方法,则无论是否需要,都会始终创建对话框。使用 pack url 的问题是扩展将无法控制对话框实例的创建方式。如果控件在创建后需要初始化(需要创建 View 模型等)怎么办?
在我看来,最好公开一个将用于创建对话框的工厂:
public IExtDialogFactory ExtDialogFactory { get; set; }
public interface IExtDialogFactory
{
UserControl CreateDialog();
}
关于c# - 具有单独程序集和加载控件的 MEF WPF 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717470/