MEF WPF应用程序具有单独的程序集和加载控件

时间:2011-01-17 20:20:55

标签: c# wpf c#-4.0 wpf-controls mef

我在通过MEF连接的单独dll文件中有UI应用扩展。我的问题是,如果他们有一个对话框(WPF用户控件),我应该将对话框作为扩展的属性,如下所示:

public UserControl ExtDialog { get; set; }

或者我应该将它们装入包装uri?

public string ExtDialogUri { get; set; }

我倾向于uri,但不确定它是否真的有效。这种方式更“推荐”的方式是什么?

注意:这些对话框将导航到NavigationService.Navigate();方法

1 个答案:

答案 0 :(得分:4)

我不会使用这两个选项。问题是这两种方法在创建对话框时缺乏灵活性。如果使用第一种方法,则无论是否需要,都将始终创建对话框。使用pack url的问题是扩展将无法控制如何创建对话框的实例。如果控件需要在创建后初始化(需要创建视图模型等),该怎么办?

在我看来,最好公开一个用于创建对话框的工厂:

public IExtDialogFactory ExtDialogFactory { get; set; }

public interface IExtDialogFactory
{
    UserControl CreateDialog(); 
}