在从 XAML 实例化的控件中使用 MEF

2024-01-01

我创建了一个 UserControl,它使用[Import]属性。

public class MyUserControl : UserControl, IPartImportsSatisfiedNotification
{
    [Import]
    public IService Service { get; set; }

    public MyUserControl()
    {
    }

    public void OnImportsSatisfied()
    {
        // Do something with Service.
    }
}

此 UserControl 是从 XAML 实例化的,因此其导入未得到满足,并且OnImportsSatisfied没有被调用。

<local:MyUserControl />

我的问题是,当在 XAML 中创建类时,如何满足类的导入。


来自 MSDN:

要在 XAML 中实例化为对象元素,自定义类必须 满足以下要求:
自定义类必须是公共的,并且必须公开默认(无参数)公共构造函数。 (请参阅以下部分的注释 关于结构。)
自定义类不能是嵌套类。全名路径中的额外“点”使类名称空间划分不明确,并且 干扰其他 XAML 功能,例如附加属性。
如果一个对象可以实例化为对象元素,则创建的对象 可以填写任何采用以下属性的属性元素形式 对象作为其基础类型。
您仍然可以提供对象值 对于不满足这些条件的类型,如果您启用一个值 转换器。有关详细信息,请参阅类型转换器和标记 XAML 的扩展。

从那里,你有两个选择:
1)使用类型转换器 http://msdn.microsoft.com/library/ee621339.aspx#type_converters:
使用类型转换器将允许您在没有无参数构造函数的情况下实例化对象,但您必须提供一个 TypeConverter 来执行实例化。

现在,我从来不需要使用它,我无法进一步帮助你。

2) 使用 ServiceLocator 检索 IService:

public class MyUserControl : UserControl
{    
    public IService Service { get; set; }

    public MyUserControl()
    {
       Service = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IService>();
       // You can do something with Service here already.
    }
}

我意识到这是您班级设计的一个变化,但希望您能够应对它。

希望这可以帮助,

Bab.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在从 XAML 实例化的控件中使用 MEF 的相关文章

  • 当“”可以分配给std::string时,为什么有“clear”方法?

    一个可以用string clear函数清空字符串 也可以使用空双引号 来执行此操作 有什么不同 当您分配一个空字符串时 编译器必须在数据部分存储一个空的 C 字符串 并创建代码以将指向它的指针传递给赋值运算符 然后 赋值运算符必须从数据部分
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 表单.位置不起作用

    我之前问过这个问题 以为我已经解决了 但它仍然不起作用 Form Show 稍微移动表单位置 https stackoverflow com questions 1214014 form show moves form position s
  • 带有 Unicode 字符的主机名在 Windows 8 中有效

    Uri CheckHostName 回报UriHostNameType Unknown到处都是 但在 Windows 8 上 它又回来了UriHostNameType Dns 为什么突然间带有 Unicode 西里尔字符的主机名在 Wind
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • NuGet 解决包依赖项的错误版本

    所以我有一个包 NServiceBus Host 依赖于 NServiceBus gt 4 5 0 在 nuget 上有一个 4 5 1 版本的 NServiceBus 当我安装包 NServiceBus Host 时 我得到 PM gt
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • 如何通过Task.ContinueWith创建传递?

    我想在原始任务结束时添加一个任务 但想保留原始结果和类型 附加任务仅用于记录目的 例如写入控制台等 例如 Task Run gt DateTime Now Hour gt 12 Hey throw new Exception Continu
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • Selenium WebDriver 在按钮单击事件上无法正常工作。这里有什么问题呢?

    I am using following code to scrape data from a website I have following interface 这是 HTML div class es content div

随机推荐

  • Neo4j 关系索引 - 搜索关系属性

    我有一个具有以下结构的 neo4j 图 账户 交易 账户 Transaction是neo4j关系 Account是节点 每笔交易都设置了各种属性 例如交易 ID 金额 日期和各种其他银行信息 我可以按帐户 ID 运行搜索 结果返回正常 但是
  • 如何防止 iPhone 屏幕在应用程序运行时变暗或关闭?

    我正在开发一个不需要用户输入的应用程序 但我不希望 iPhone 进入省电模式 是否可以通过应用程序禁用省电功能 Objective C UIApplication sharedApplication setIdleTimerDisable
  • Kendo Ui 下拉列表集通过 Javascript 可见

    我需要在 javaScript 中以编程方式设置可见的kendo dropdownlist 我曾尝试过 dropdownlist ddl data kendoDropDownList dropdownlist visible false d
  • 按因子级别拆分数据帧并按这些级别命名数据帧

    我想按因子变量之一的级别拆分现有数据帧 以便拆分数据帧的名称与因子的级别相对应 df lt data frame cbind X 1 10 Y rnorm 10 Z sample LETTERS 1 3 10 replace TRUE If
  • 使 div 自动向左而不是向右扩展宽度

    我的网站上有一个 div 其中包含充当菜单的项目列表 我已经设置了CSSwidth auto这样 如果菜单项太长 它会重新调整大小 但目前 这将扩展到右侧 并将我的其余内容 推 到右侧 这很难解释 所以举个例子 如果你去http redsq
  • C 中 _Bool 和 bool 类型之间的区别?

    谁能解释一下两者之间有什么区别 Bool and boolC 中的数据类型 例如 Bool x 1 bool y true printf d x printf d y 这些数据类型是在 C99 中添加的 自从bool在 C99 之前没有保留
  • 如何在 Sails js (nodejs MVC) 中使用外部 REST API

    我正在使用 sails js 作为 Node js 的 MVC 我仍在学习它 我设法从自己的数据库中获取数据并使用它 但现在我需要 想要从外部 REST API 获取数据 我在我的控制器中使用了这个 api controllers Some
  • C++ 的首选命名约定是什么?

    通过查看 boost 库和 stl 然后查看人们的示例 我感到非常困惑 看起来大写的类型名称都散布在所有小写字母中 并用下划线分隔 如今 事情到底应该怎样做呢 我知道 NET 世界有自己的一套约定 但它似乎与 C 领域完全不同 你打开了一个
  • 监听来自 Dart 的 javascript 事件

    Dart 有没有办法监听 javascript 库中的事件 例如 jqrangesliderhttp ghusse github io jQRangeSlider http ghusse github io jQRangeSlider 当有
  • 过滤字典内的数组 - Swift

    我正在尝试搜索索引字典以根据客户的姓氏返回特定客户 以下是我正在使用的数据结构 每个客户端对象都有一个名称属性 它是一个字符串 var clients Client loadAllClients Returns client array v
  • 滚动条触发的jquery mouseleave文档

    document ready function document mouseleave function desktop subscribe modal modal show 我试图在鼠标离开文档窗口时触发一个功能 上面的代码在 Firef
  • knitr 的 kable 将 2.29e-30 打印为“0”

    CODE some data dat lt data frame log2fc c 0 28 10 82 8 54 5 64 8 79 6 46 pvalue c 0 00e 00 2 29e 30 7 02e 30 4 14e 29 1
  • Firebase 流式 REST 连接是否计入并发连接限制?

    In a 最近的问题 https stackoverflow com q 28229543 209103有人指出Firebase 定价文档 https www firebase com pricing html states REST AP
  • 是否可以在 Eclipse 中从多个包运行 JUnit 测试?

    是否可以同时运行多个包的 JUnit 测试 而无需手动创建测试套件 例如 如果我有层次结构 代码 branchone代码 branchone aaa代码 branchone bbb代码 branchtwo代码 branchtwo aaa代码
  • 在整个 Webresource.axd 中使用嵌入式 WebResources

    问题很简单 如何在 ASP NET 应用程序中使用嵌入式资源 将资源包含在程序集中的步骤是什么 以及如何引用它 可能会遇到哪些问题 编辑 对于未引用 Page 和 ClientScript 的版本 请参阅在 Razor 视图上处理嵌入式资源
  • 正则表达式匹配星号和换行符之间的字符串

    例子 blah blah Match this text Match this text Match this text Match this text Match this text more text more text 如何从星号内部
  • Semantic-ui 与 Bootstrap [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 哪一种最好用 如果可能 请提供这两者的区别和优点 语义用户界面 http semantic ui com vs 引导程序 http getboo
  • 将 Rails 应用程序部署到 Heroku 不断崩溃

    这个答案似乎已经以多种方式得到了回答 但似乎没有一个适合我的确切问题 我正在使用 RailsApps 中的应用程序https github com RailsApps rails devise pundit https github com
  • 如何将git存储库的根设置为vi/vim查找路径?

    我想设置 vim 文件搜索路径以包括 git 存储库根 可以通过以下方式找到 git rev parse show toplevel 我不知道如何附加这个输出git命令 set path 在 vimrc 中 Thanks 您可以使用此命令
  • 在从 XAML 实例化的控件中使用 MEF

    我创建了一个 UserControl 它使用 Import 属性 public class MyUserControl UserControl IPartImportsSatisfiedNotification Import public