具有多个构造函数的 MEF 构造函数参数

2023-11-24

我开始使用 MEF,并且我有一个具有多个构造函数的类,如下所示:

[Export(typeof(ifoo))]
class foo : ifoo {
    void foo() { ... }
    [ImportingConstructor]
    void foo(object par1) { ... }
}

我在用catalog.ComposeExportedValue()当编写以提供par1第二个构造函数的值:

...
catalog.ComposeExportedValue(par1Value);
catalog.ComposeParts(this);
...

为了容纳我正在使用的组件:

[ImportMany(typeof(ifoo))]
public List<Lazy<ifoo, ifoometadata>> FooList { get; set; }

并创建foo例如我正在使用 value 属性,FooList[0].Value.

一切正常,除了第二个构造函数foo类永远不会被调用。怎么了?

MEF 实例化类时如何选择要使用的构造函数?


MEF 应该使用您放置的构造函数ImportingConstructorAttribute在。我不确定您发生了什么,我无法重现该问题。这是一个测试,显示在也具有默认构造函数的类上使用 ImportingConstructor:

[TestClass]
public class MefTest
{
    public const string ConstructorParameterContract = "FooConstructorParameterContract";

    [TestMethod]
    public void TestConstructorInjectionWithMultipleConstructors()
    {
        string ExpectedConstructorParameterValue = "42";

        var catalog = new TypeCatalog(typeof(Foo), typeof(FooImporter));
        var container = new CompositionContainer(catalog);

        container.ComposeExportedValue<string>(ConstructorParameterContract, ExpectedConstructorParameterValue);

        var fooImporter = container.GetExportedValue<FooImporter>();

        Assert.AreEqual(1, fooImporter.FooList.Count, "Expect a single IFoo import in the list");
        Assert.AreEqual(ExpectedConstructorParameterValue, fooImporter.FooList[0].Value.ConstructorParameter, "Expected foo's ConstructorParameter to have the correct value.");
    }
}

public interface IFoo
{
    string ConstructorParameter { get; }
}

[Export(typeof(IFoo))]
public class Foo : IFoo
{
    public Foo()
    {
        ConstructorParameter = null;
    }

    [ImportingConstructor]
    public Foo([Import(MefTest.ConstructorParameterContract)]string constructorParameter)
    {
        this.ConstructorParameter = constructorParameter;
    }


    public string ConstructorParameter { get; private set; }
}

[Export]
public class FooImporter
{
    [ImportMany]
    public List<Lazy<IFoo>> FooList { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个构造函数的 MEF 构造函数参数 的相关文章

  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • DataTable.GetChanges() 不断返回 NULL

    我正在尝试获取存在于的所有行allData但不在removeData public static DataTable RemoveDuplicateRows DataTable allData DataTable removeData re
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File

随机推荐

  • Google Chrome 扩展程序获取页面信息

    我正在制作一个 google chrome 扩展 我需要获取当前页面的 URL 和标题 我怎样才能实现这个目标 chrome tabs getSelected null function tab lt tab has all the inf
  • 如何使用 Iron Router 返回 404

    当我找到使用 IR 的 Meteor 应用程序中不存在的路线时 我会收到200带有 HTML 的响应 当在浏览器上呈现时 在控制台上显示 js 错误 说明No route found for path aRoute 怎样才能让它返回404
  • -[UIApplication _runWithMainScene:transitionContext:completion:] 中断言失败,

    我仅在 iOS9 中收到以下错误 这是我的代码 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOpti
  • 带有 UIViewController 的插件

    有人可以向我解释 Cordova iOS 插件的生命周期吗 特别是 我有一个正在尝试开发的插件 其中包含UIView 以及相关的UIViewController 我如何获得科尔多瓦UIView从我的扩展CDVPlugin类 这样我就可以将我
  • Java中获取二维数组的数组长度

    我需要获取行和列的二维数组的长度 我已经使用以下代码成功完成了此操作 public class MyClass public static void main String args int test test new int 5 10 i
  • 是否可以使用 HttpModule 删除一些发布数据?

    我正在将一个旧的经典 asp 网站转换为 asp net 该应用程序基本上是针对给定用户组的工具集的扩展 但它由外部供应商托管 为了执行到此应用程序的无缝传输 它会发布一些 xml 数据 该数据会触发 潜在危险的 Request Form
  • Linq-to-Sql SubmitChanges 不更新字段...为什么?

    我发布了这个question昨天晚上 这让我发现了一个huge问题 我的数据库中有一个名为 单位 的十进制列 每当我将该列的值设置为非零时 并且 SubmitChanges 列都会更新为新值 如果我尝试将该列的值设置为零 则 SubmitC
  • 如何fork JVM? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 类似 C 的 Fork 我想知道如何从 JDK 派生一个子 JVM 或者甚至可以这样做吗 一些框架 例如 hadoop 会为特定任务创建一个子 JVM 因此请对这个主题进行一些说明 Than
  • 如何使用 EPPLus 修改图表系列?

    我想问一下如何使用 EPPLUS 库更新 Excel 中现有图表的系列值 我还不知道该怎么做 我已经成功创建图表 但仍然无法更新系列值 任何人都可以给我提供一些示例代码或参考链接吗 抱歉这么晚才回答 在搜索其他内容时看到您的帖子 如果图表有
  • vscode "python.jediEnabled": false,显示为未知配置设置

    这是settings json文件代码 python autoComplete addBrackets true python linting enabled true python pythonPath C Program Files P
  • 一次一密,加密解密

    我正在尝试学习密码学并且一直在尝试这个练习 编写一个程序 最好是Java 生成一次性的pad 这是所有文件中比较大的一个 随机数据 例如 1 MB 该程序还应该能够根据以下内容加密 解密文件 生成一次性本 提示 使用以下测试向量来检查您的程
  • 使用 C# 将日期时间格式转换为 SQL 格式

    我正在尝试从 C 保存当前日期时间格式并将其转换为 SQL Server 日期格式 如下所示yyyy MM dd HH mm ss所以我可以用它来我的UPDATE query 这是我的第一个代码 DateTime myDateTime Da
  • 找不到 -lboost_system 的库

    我使用 macports 安装了 boost 这些文件似乎位于 opt local include boost 中 我的 makefile 不再工作并且出现以下错误 Undefined symbols boost system generi
  • 在 C# 中以编程方式设置 dllimport

    我在用DllImport在我的解决方案中 我的问题是我有同一个 DLL 的两个版本 一个是为 32 位构建的 另一个是为 64 位构建的 它们都公开具有相同名称和相同签名的相同函数 我的问题是我必须使用两个静态方法来公开这些方法 然后在运行
  • 如何使用 ember-rails 启用 query-params-new 功能

    我在使用 query params new 功能时遇到问题 我的 ember 版本是 1 4 0 beta 2 Ember js 通过 ember rails 和 ember source gems 加载到我的 Rails 应用程序中 在初
  • 从模板(视图)中动态加载 AngularJS 模块

    背景 为了便于讨论 我们假设您有 100 000 次观看 部分观看 我们还假设您有附带的视图范围控制器 以及潜在的视图范围服务和过滤器 尝试设想一个托管 100 000 个不同小型应用程序的聚合应用程序 Issue 当您有需要附带控制器的
  • ASP.NET MVC 忽略所有 url 末尾的“.html”

    我是 ASP NET MVC 新手 现在正在努力解决 url 路由问题 我正在使用 asp net mvc 3 RC2 如何创建一个 url 路由IGNORESurl 中最末尾的扩展名 扩展名可以是 html aspx php anythi
  • 如何实现类似于 jQuery UI 自动完成的 Dojo 自动完成?

    美好的一天 我使用 JSP 和 jQuery UI 成功实现了文本输入的自动完成功能 自动完成数据从数据库中检索并通过服务器端的 q 参数进行过滤 它返回包含查询字符串的所有项目 SELECT name FROM organization
  • NHibernate 代理的 JSON.Net 序列化 (NH 3.3.2.4000)

    I m still让 Json Net 和 NHibernate 很好地协同工作一直存在困难 即 让 Json NET 序列化代理的 NHibernate 对象 我已遵循建议here 无论是已接受的答案还是修正案 但没有骰子 上述解决方案的
  • 具有多个构造函数的 MEF 构造函数参数

    我开始使用 MEF 并且我有一个具有多个构造函数的类 如下所示 Export typeof ifoo class foo ifoo void foo ImportingConstructor void foo object par1 我在用