问题标签 [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 回答
723 浏览

dependency-injection - 如何在 n 层应用程序中使用 MVC5 和 MEF2(基于约定)实现依赖注入?

我正在开始一个新的 MVC 项目,并且(几乎)决定尝试一下 Repository Pattern 和 Dependency Injection。筛选变化需要一段时间,但我为我的应用程序提出了以下结构:

  1. 表示层:ASP.Net MVC 前端(视图/控制器等)
  2. 服务层(业务层,如果您愿意):接口和 DTO。
  3. 数据层:接口实现和实体框架类。

在我的解决方案中,它们是 3 个独立的项目。表示层只有对服务层的引用。数据层也只有对服务层的引用——所以这基本上遵循领域驱动设计。

以这种方式构建事物的目的是为了关注点分离、松散耦合和可测试性。如果其中任何一项不合理,我很乐意就改进提出建议?

我遇到困难的部分是将接口实现对象从数据层注入到表示层,它只知道服务层中的接口。这似乎正是 DI 的用途,而 IoC 框架(据称!)使这更容易,所以我想我会尝试 MEF2。但是在过去几天我阅读的数十篇文章和问题和答案中,似乎没有什么能以适合我结构的方式真正解决这个问题。几乎所有这些都已弃用和/或都是简单的控制台应用程序示例,它们在同一个程序集中具有所有接口和类,彼此了解,完全无视松散耦合和 DI 的观点。

有一些解决方案探索基于属性的注册,但据说已经被基于约定的注册所取代。我还看到很多将对象注入控制器构造函数的示例,这引入了它自己要解决的一组问题。我不相信控制器实际上应该知道这一点,并且宁愿将对象注入模型中,但这可能是有原因的,因为很多示例似乎都遵循这条路径。我还没有深入研究这一点,因为我仍然坚持尝试将数据层对象放到任何地方的表示层中。

我相信我的主要问题之一是不了解各种 MEF2 需要在哪一层进行,因为我发现的每个示例都只使用一层。有容器、注册和目录以及导出和导入配置,我一直无法弄清楚所有这些代码应该放在哪里。

具有讽刺意味的是,现代设计模式本应抽象复杂性并简化我们的任务,但如果我刚刚从 PL 中引用 DAL 并着手处理应用程序的实际功能,我现在已经完成了一半。如果有人能说,‘是的,我明白你在做什么,但你缺少 xyz,我会非常感激。你需要做的是 abc'。

谢谢。

0 投票
1 回答
1671 浏览

c# - MEF2 如何使用基于约定的导入从 CompositionHost 导出中获取元数据

这是我的第一个 SO 问题,所以请多多包涵……

我正在尝试使用 ConventionBuilder 类使用 MEF2 加载组件。一切都按预期工作,直到我需要访问可用作导入类型的属性的元数据。假设我有以下课程:

现在我可以有一个 ConventionBuilder 实例来定义“IRunTimeCheck”实例的约定:

然后,我将使用已配置为检查程序集列表的“CompositionHost”实例。打电话给

然后将创建所有导出的“IRuntimeCheck”类型的实例。

我现在的问题是如何在导出过程中访问 IRunTimeCheck 类型的元数据。使用 MEF1,我可以使用 ImportMany / Lazy 机制。到目前为止,我还没有找到使用 MEF2 重建此行为的好方法,因为“CompositionHost”上的所有导出重载都不允许我访问元数据属性。

我已经设法通过使用 AddPartMetaData 在 ConventionBuilder 级别添加元数据:

当我调试 MEF2 代码时,我可以看到元数据信息是在约定生成器级别添加的。但我不知道如何再次导出此信息。我发现了一些尝试使用 ExportFactory 的帖子。但他们中的大多数人都在使用非共享导出,这不是我的目标。

0 投票
1 回答
603 浏览

c# - Microsoft.Composition。WithDefaultConventions 方法有什么作用?

假设我有一个方法 GetAssemblies,它返回一个程序集列表,还有一个名为 GetConventions 的方法,它返回一个 ConventionBuilder,我可能会像这样组成我的容器:

但我也可以这样写:

问题:这两种方式之间有什么区别(如果有的话)?

正是 WithDefaultConventions 中的“默认”一词让我感到震惊。MSDN 并没有说明这意味着什么。如果该方法被简单地称为 WithConventions,我不会再考虑它了。


下面的示例方法。

获取程序集:

获取约定:

0 投票
1 回答
1199 浏览

c# - Microsoft.Composition (MEF2) Conventions and Open Generics

I have a type

I can export this using

which will enable me to import with

However, I would like to import these types as

which doesn't seem possible without creating concrete types for each queue.

I want to use conventions to provide these exports, and add metadata to each one. I'm fine with how to add the metadata, but I'm not sure how to provide the exports. Essentially what I want is something like (pseudo-code)

but this won't work unless I actually create concrete types for each queue, which is what I don't want to have to do.

Is there a way to do this?

0 投票
1 回答
749 浏览

c# - 如何安装/开始使用 MEF 2

我想在项目中使用 MEF 2。我正在尝试按照本指南开始,但我似乎连第一段代码都无法运行。RegistrationBuilder根本不存在,我似乎没有它应该在的名称System.ComponentModel.Composition.Registration空间。

我所做的就是从 Nuget 安装 Microsoft.Composition 包。我能够很好地找到System.Composition命名空间中的类,但这似乎还不足以开始。

我正在使用带有 .NET 4.5.1 的 Visual Studio Professional 2013。该项目是一个控制台项目(虽然我也尝试过一个 Windows 项目),虽然最终目标是在 ASP.NET 中使用它。

我还需要做什么才能让 MEF2 正常工作?

0 投票
1 回答
2244 浏览

.net - MEF 或 MEF2 是否已融入 .NET 框架?

我正在尝试了解 MEF,并且看到了对 MEF 和 MEF 2 的引用。

站点将 MEF2 列为比 MEF (4.0) 快得多。

当大多数人说 MEF 时,我需要理解我在说什么。

那么 .NET Framework 4.5 中有哪些呢?MEF 还是 MEF2?

0 投票
1 回答
242 浏览

mef2 - 我如何模仿 mef2 中的继承导出功能

我正在使用 MEF2 并阅读了一些关于 MEF 1 和 MEF 2 的教程。

到目前为止我发现的最好的是这个: http: //www.codeproject.com/Articles/366583/MEF-Preview-Beginners-Guide

虽然我确实让导出工作得很好,但我真的想使用属性样式来做,因为在接口上使用 InheritedExport 似乎比在我声明的接口和我的容器约定之间来回方便得多。

这是我的代码片段:

所以真的有3个选项:

  • 我在 MEF 2 中找不到重命名的功能
  • 我没有使用正确的方法
  • 我错过了一些明显的东西

据我所知,这应该很容易:

  • 检查(自定义)属性的类型,
  • 为包含所需属性的类型提取所需的导出类型
  • 完成导出

但是使用 ForTypesMatching 我似乎无法做我想做的事,因为没有可用于 builder 变量的类型信息。

我是否正在尝试做一些奇怪的事情,这在 MEF 2 中是不可能的,但在 MEF 1 中是可能的?

更新:

有趣的阅​​读:http: //blog.slaks.net/2014-11-16/mef2-roslyn-visual-studio-compatibility/

0 投票
2 回答
1572 浏览

dependency-injection - 使用 MEF 2 组合导出的值

使用 MEF 1,可以使用 ComposeExportedValue(...)-Method ( container.ComposeExportedValue...) 将现有对象组合到容器中。Microsoft.Composition (MEF 2) 如何做到这一点?我找不到任何用于此目的的方法。

0 投票
1 回答
817 浏览

c# - 如何在 MEF 2 中导出工厂和/或其方法?

我正在研究MEF 2 (Microsoft.Composition),并希望将其与我现有的代码库集成。

我当前的代码库有一个IFactory带有简单签名的接口:

我想注册我的工厂,这样如果我对工厂进行出口,它就会被注册为Func<T>工厂的T输出。所以是这样的:

将使用以下代码返回一个新Class实例和对该Create方法的引用(作为委托):Func<Class>

我确实看到了这个问题,但它似乎不适用于 MEF 2。现在各种事情都不同了,但似乎更加轻量/精简(如广告中所宣传的那样!)。

是否有可能实现我希望使用 MEF 2 做的事情?

0 投票
0 回答
225 浏览

dependency-injection - 在 uwp 中向 mef2 注册实例

我下载了 nuget 包 Microsoft.Composition 并尝试使用 mef2 注册服务。似乎整个框架都发生了变化。CompositionContainer、AggregateCatalog 和 RegistrationBuilder 消失了。CompositionContainer 似乎被 CompositeHost 取代。我试图在 CompositeHost 上注册我的实例,但只有 GetExport 的功能。

如何将我的实例注册到 CompositeHost?

我也找不到如何在 uwp 中使用 mef2 的文档。