问题标签 [mef2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2438 浏览

mef - MEF 2 中包含哪些内容?

我看到 MEF( MEF Codeplex 站点)上的新功能仍在继续工作,并且他们正在发布 MEF 2 beta 版本,但是他们没有关于新功能正在试验/探索/构建的任何体面的文档?

那么,MEF 2 中的新功能是什么(请详细说明一下,每个句子一两句就可以了)?

0 投票
1 回答
2464 浏览

c# - MEF2 导入的好例子

我以前使用过 MEF,但现在在使用较新的实现时遇到了问题。我正在导出从具有 [InheritedExport] 属性的基类继承的对象,并试图将它们导入。

以前,我只需要一个带有 [ImportMany(typeof(mytype))] 的数组属性,并使用 CompositionInitializer.SatisfyImports(this) 来使导入工作,但现在我有两个问题:

1) 导出位于不同的引用程序集中;2)CompositionInitializer 似乎不存在于 4.5 框架中较新的 MEF 中。

我正在尝试创建一个 AggregateCatalog 来解决问题 #1,但不知道从这里去哪里。

最后,我正在尝试导入一个可供整个 WPF 应用程序使用的集合,如果有人可以帮助我提出整体解决方案的话。

0 投票
1 回答
1564 浏览

c# - Mef2 在每个模块中配置注册

好的,所以我在使用 .Net 4.5 的 C# WPF 应用程序中使用 Caliburn Micro 和 Mef2。我想知道是否有任何方法可以在单独的 dll 中配置 Mef2 的注册,然后在我的主 dll 中使用它们。基本上,dll 将配置自己的导入和导出。

就像是:

在每个 dll 中,但我坚持将所有注册合并到一个 RegistrationBuilder 中,然后传递到每个目录中。

0 投票
2 回答
4222 浏览

c# - MEF2 目录如何工作?好像被删了

我在 MEF2 上找不到任何好的例子。

我想创建一个插件目录并使用目录目录来加载 Imports。

我想要什么:

  1. 没有属性。使用带有约定的配置生成器
  2. 插件目录
  3. 添加 dll 时,应用程序知道有新的导出可用。

我可以为此使用温莎城堡吗?

0 投票
1 回答
1252 浏览

c# - MEF DirectoryCatalog 多次读取同一个 dll

我有一个简单的 MEF 从目录加载一些 dll(插件)的实现。这在 MEF1 下运行良好,但现在我想使用与 MEF2 相同的功能,它为我提供了一个 IEnumerable,其中包含目录中正确数量的 dll,但所有程序集都相同。

例如,我有两个程序集:目录中有 fakeplugin1.dll 和 fakeplugin2.dll。他们导出 FakePlugin1 和 FakePlugin2 类。现在,当我调用 container.ComposeParts() 时,列表中没有任何用 ImportMany 装饰的内容,而 container.Catalog 在目录中包含两个程序集,但它们都是 FakePlugin1。

这是代码:

我正在尝试使用 ExportFactory 和 RegistrationBuilder,但我刚刚意识到即使是基本功能也无法按预期工作。

我究竟做错了什么?我应该知道 MEF2 有什么变化吗?如何加载两个不同的程序集?:)

提前感谢您的帮助!

编辑: 它总是在文件夹中创建第一种类型的两个实例(在 abc 中升序)。如果我将另一个放在文件夹中,它会创建三个相同的,等等。

编辑:我已将代码上传到 pastebin,与 MEF2 给出相同的结果:http: //pastebin.com/3fWcujPS

0 投票
1 回答
171 浏览

c# - 在 MEF 中解析 HttpRequestBase

我对 MEF 很陌生,我一直使用 autofac,它会在请求的生命周期范围内自动注册所有“Web 请求”范围的对象,因此您始终可以解析 HttpRequestBase 和依赖项中的类似对象。

有没有办法修改 MEF 容器注册以解决这种依赖关系?

0 投票
2 回答
3146 浏览

asp.net-mvc - 如何使用 ASP.NET MVC、WebAPI 和 MEF 正确确定每个请求的组合范围

我最近使用各种资源将 MEF 添加到 MVC/WebAPI 应用程序中,包括这个 SO answer How to integration MEF with ASP.NET MVC 4 and ASP.NET Web API。虽然这工作了一段时间,但我开始收到与建立数据库连接相关的间歇性错误,最常见的错误是:“System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能发生,因为所有池连接都在使用中,并且达到了最大池大小。”

我意识到我正在泄漏连接,但不明白为什么。我所有的存储库都实现了 IDisposable 并在完成后处理了它们的连接。在我的 dispose 方法中设置断点很快就会发现它们从未被命中。当我基于上面链接的示例的代码时,我注意到缺少任何清理,但是作为 MEF 和 MVC 的新手,我错误地认为清理是在 MVC/MEF 的依赖管道中的某个地方完成的。

我想知道其他人如何使用 MEF 在 MVC 和 WebAPI 中根据每个请求正确范围组合?

我在这里和那里找到了模糊的指导,它们都是针对 MVC 或 WebAPI 的。Mef.codeplex 在这里有一个几乎完整的以 MVC 为中心的解决方案:https ://mef.codeplex.com/releases/view/79090但它基于 MVC 的预览版。我在这里找到了一个 WebAPI 解决方案:https ://github.com/WebApiContrib/WebApiContrib.IoC.Mef 。我目前正在推出自己的解决方案,但由于我讨厌重新发明轮子,我想我想问问是否有人知道是否有人已经知道了。

0 投票
2 回答
1014 浏览

c# - 在 MEF 2 中组合开放泛型类型和封闭类型

我知道从 MEF 2 开始,MEF 支持将开放的泛型类型组合成封闭的类型。我正在尝试从添加到同一个组合容器的两个不同程序集导出的类型中组合一个封闭类型,并且我收到 ImportCardinalityMismatchException。我正在对其中一个程序集使用约定,因为它不在我的控制之下。对于其他我使用了属性。

我不确定如何表达我的问题,因为我发现围绕泛型的术语相当混乱,但我希望在不显式实现我自己的类、从 Foo 继承并为其提供我的 FooUser 类型参数的情况下编写我的新封闭类型。我不知道这是否与我的操作方式有关,或者是否与类型位于不同程序集中的事实有关。

在一个程序集中,我有以下内容:

在另一个程序集中,我有以下内容:

在我的注册码中,我做了以下事情:

后来我尝试这样导出我的值:

异常:抛出:“未找到与约束匹配的导出:ContractName Foo(Bar2)RequiredTypeIdentity Foo(Bar2)”(System.ComponentModel.Composition.ImportCardinalityMismatchException)抛出了 System.ComponentModel.Composition.ImportCardinalityMismatchException:“未找到导出与约束匹配:ContractName Foo(Bar2) RequiredTypeIdentity Foo(Bar2)"

我查看了我的约定实例,并在容器中查看了我的部分,即 Foo{0}、Bar2 和Something。但是,我仍然收到 System.ComponentModel.Composition.ImportCardinalityMismatchException。

我已经在更抽象的情况下看到了这一点,比如有 IRepository,但没有更具体的东西,也没有跨越程序集的项目。任何帮助将不胜感激。除非有任何帮助,否则我可能会从有问题的类型继承并完成它。

编辑:我刚刚构建了上面详述的非常简化的示例,因为我在现实世界的项目中实际上正在做一些与我在这里不同的事情并且我有不同的相似结果。我重命名了一些类型以使它们与我的简化示例保持一致。

合成产生了一个单一的合成错误。下面提供了根本原因。查看 CompositionException.Errors 属性以获取更多详细信息。

1) 未找到与约束匹配的导出:ContractName CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2) RequiredTypeIdentity CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)

导致:无法在“CompositionTest.Something”部分设置导入“CompositionTest.Something..ctor (Parameter="foo", ContractName="CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)")”。元素:CompositionTest.Something..ctor (Parameter="foo", ContractName="CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)") --> CompositionTest.Something --> AssemblyCatalog (Assembly="CompositionTest, Version=1.0.0.0,文化=中性,PublicKeyToken=null")

导致:无法从“CompositionTest.Something”部分导出“CompositionTest.Something (ContractName="CompositionTest.Something")”。元素:CompositionTest.Something (ContractName="CompositionTest.Something") --> CompositionTest.Something --> AssemblyCatalog (Assembly="CompositionTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

0 投票
0 回答
405 浏览

mef2 - MEF2:除非明确导出,否则找不到导入

我正在尝试让 MEF2 无属性/基于约定的注册在我的应用程序中工作。我所看到的是,如果我省略该[Export]属性,则ComposeParts调用或GetExports调用都不会产生任何项目。

如果我[Export(typeof(IGuiModule))]向我的班级添加一个属性,它会被很好地拾取,但会出现(合理的)警告:

“适用于类型 'Core.Models.DeviceListView' 的导出规范约定已被源文件中应用的属性或先前的约定覆盖。”

我在这里错过了什么,或者有错误的期望吗?我被引导相信 MEF2 方法允许您在不需要显式导出属性的情况下导入?

我发现的信息有点杂乱无章,各种来源显示不同的信息(我想随着 MEF 的发展)。

导出类:

0 投票
1 回答
344 浏览

mef2 - MEF 2 - RegistrationBuilder 在哪里

今天晚上我完全糊涂了。我已经阅读了近十篇关于如何使用 MEF 2 中的 RegistrationBuilder 来构建组合上下文的文章。但是,在我下载来构建 WinRT 应用程序的 MEF 2 中没有这样的类。有人可以提供一个快速路线图,解释为什么围绕 MEF 2 的在线讨论与我在最新版本的 MEF 2 中使用的实际课程之间存在如此大的差异?此外,该库的帮助 URL 将非常有用。