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

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

我在通过 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/

相关文章:

c# - 如何以编程方式检查键盘是否已连接?

c# - 当注册名称不唯一时,有什么方法可以从 ROT 获取对象?

c# - xunit 测试不将输出保存到 xml

wpf - WinForms ReportViewer 挂起应用程序 WPF

mongodb - Lambda 表达式不适用于 MongoDb C# Driver 1.4

c#-4.0 - 如何保持对象的唯一性

c# - 如何判断 Request.Form 中的值是否为数字? (C#)

c# - Windows 10 移动版上的初始屏幕状态栏颜色

c# - 无法通过按钮删除正在使用的图像

wpf - 将图像停靠在 StackPanel WPF 右侧