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

mef - 使用 Microsoft Composition MEF2 的可移植类库的 MEF 引发文件未找到异常

我正在研究可移植类库(PCL)并试图在其中实现 MEF。我使用了 Nuget 的 System.Composition。当我为 vsix(Visual Studio 扩展)构建和打包时,它不会打包并将这些 dll 放置到扩展文件夹(C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\14.0Exp\Extensions\ExtensionName\AppName\你的应用程序的版本)。当我手动将这些库放在这个文件夹中时,它工作正常。有人可以提出一个很好的解决方案来解决这个问题。我正在为 Roslyn Analyzers 编写它并创建一个 nuget 包。我再次面临同样的问题,即使我将这些库打包在一起。

0 投票
0 回答
583 浏览

c# - MEF2:导入实现特定接口的所有类型

我正在尝试使用 MEF2 创建一个简单的插件系统。

在我的场景中,我将只有 1-10 个插件,因此我决定不费心在单独的域中加载程序集以避免性能问题;无论如何这会很好,但它似乎对导出的对象造成了一些限制(必须是[Serializable]并派生自MarshalByRefObject:参见https://msdn.microsoft.com/en-us/library/ms972968.aspxhttp://www .codeproject.com/Articles/1091726/The-Nuances-of-Loading-and-Unloading-Assemblies-wihttps://msdn.microsoft.com/en-us/magazine/jj133818.aspx),我需要它们成为 POCO 对象,因为我无法控制它们的来源。

我只需要加载从特定接口派生的所有导出类型的程序集,因此我创建了一个简单的目录类,它扫描目录以收集程序集,并可以返回一个配置了约定的 MEF2 容器,导出从 T 派生的所有类型(请参阅以下)。

无论如何,当我尝试使用它时,即使正确找到并加载了容器程序集,我也无法在目录中进行任何导出。当然,我在 MEF2 导出约定中遗漏了一些东西,有人能指出我的解决方案吗?

您可以在这里找到完整的虚拟复制解决方案https://onedrive.live.com/redir?resid=F8DEF93587EC2C1!258076&authkey=!AKSKUhMwFhV0n-k&ithint=file%2czip

以下是相关代码和使用示例:

使用示例:

0 投票
1 回答
739 浏览

c# - 为什么 MEF2 不对所有部件导出应用元数据属性?

我正在尝试将一组基于 .NET Framework 的应用程序移植到 .NET Core,作为此过程的一部分,我需要从使用 MEF1 切换到 MEF2。我在解决与 MEF2 相关的问题时遇到了很多困难(尽管我发现这篇文章真的很有帮助),但我最近偶然发现了其中一个问题背后的原因。

特别是,我有许多使用自定义导出元数据的类,ExportAttribute我想将它们全部导入另一个类并根据此元数据过滤它们。这在 MEF1 中一切正常,但在 MEF2 中,我遇到了诸如“缺少x的导出元数据并且没有提供默认值”之类的问题。

更具体地说,我将导出的类注释如下:

然后在其他地方,我将尝试像这样导入它们:

然后,在满足导入的情况下,尝试按元数据过滤它们:

其中TargetDeviceAttribute定义如下:

我发现正在发生的事情是该部分 RelaySystemClientRequestProcessor对应于两个导出: IClientRequestProcessor<RelaySystemModel>,这是我感兴趣的导出和我尝试导入该部分的接口,和RelaySystemClientRequestProcessor。但是,“DeviceId”元数据与后者关联而不与前者关联,这没有帮助。

MEF2-出口

尽管我还没有完全测试过,但我相信有几种方法可以解决这个问题:

  1. 将属性ExportMetadata("DeviceId", "<<foo>>")应用于我所有导出的部件。

  2. 更改TargetDeviceAttribute为使用构造函数public TargetDeviceAttribute(string deviceId, Type exportType) : base(exportType)

我不赞成这些解决方案;如果我想更改元数据密钥,前者会出现问题,并且两者都涉及更改我导出所有部分的方式。

我想知道的是,MEF2 是否提供了一种像 MEF1 那样导出元数据的方法:通过创建自定义元数据属性并将该元数据应用于与部件关联的所有导出。这可能吗?

0 投票
1 回答
376 浏览

c# - 如何过滤 MEF2 中的部分?

我正在尝试将一些针对 .NET Framework 的代码移植到 .NET Core,其中一部分涉及从 MEF1 切换到 MEF2。似乎没有大量关于在 .NET Core 中使用 MEF 的文档,而且我找不到任何示例来演示如何使用 MEF1过滤掉部分。

在我的原始代码(使用 MEF1)中,我想加载从一组程序集中导出的所有部件,除了MockCommunicationService. 我实现了如下:

在 MEF2 中相当于什么?我想它可能涉及使用ConventionBuilder,但我不知道是否有一种方法可以按照“允许除x之外的所有内容”的方式定义约定。

理想情况下,这样的事情会很棒:

0 投票
0 回答
179 浏览

c# - 如何在 .NET Core 中释放 MEF2 (System.Composition 1.0.31) 中被阻止的程序集

我写了一些代码:

类库1.dll

和一个控制台:

我想使用 FileSystemWatcher 来观察插件文件夹中的任何更改,因此我应该可以更改/删除/重命名/创建任何 dll。

所以我有3个问题:

1.当我根据上述代码加载程序集时,我无法更改/删除插件文件夹中的任何 dll。在 .NET Framework 中,我可以使用 AppDomain 和 ShadowFolder 来创建分离的上下文。

由 MEF2 加载时是否有操作 dll 的方法?

在此处输入图像描述

2. MEF2 是否有重新加载/刷新/重新获取程序集的方法?

3.无论如何我找到了一对程序集的路径和 GetExports()吗?哪些导出类型存在于哪个程序集(路径)中。

0 投票
2 回答
446 浏览

c# - 如何在 .net-core System.Composition (Mef) 中设置 CreationPolicy 单例

我正在将 DNX 项目转换为 .net 核心。由于依赖关系的变化,我不能再使用System.ComponentModel.Composition了,而是必须使用 .net core 的移植版本System.Composition(我相信它被称为 MEF 2)。

但是,我在 MEF2 中找不到用于设置CreationPolicy单例的等效功能。在 MEF1 中,代码是

你怎么能在 MEF2 中做到这一点?

0 投票
1 回答
1408 浏览

.net-core - .net core MEF 2 非共享创建策略

我正在切换到 .net 核心并尝试将我的旧框架 MEF 代码迁移到新的Microsoft Composition (MEF 2) (Microsoft.Composition 1.0.31)。

我们有几个类的创建策略是“NonShared”。我对如何使用带有.net核心的MEF 2应用以下属性感到困惑:

有谁知道将上述属性设置为“NonShared”的 .net core MEF 2 等效项是什么?

0 投票
1 回答
261 浏览

.net-core - 在 MEF2 中创建单例实例

我正在使用 MEF2 (Microsoft.Composition) 创建具有多个插件的应用程序。这些插件应该导入一些通用对象,并且它们都应该共享该对象的同一个实例……所以是典型的 Singleton。

但是,当我[Import]将这个通用对象放入我的插件时,它们都会获得自己的副本而不是共享的副本。

在 .NET Framework MEF1 中,所有对象默认创建为单例。.NET Core MEF2 似乎并非如此。

如何确保我的所有插件都获得我的公共对象的相同单例实例?

示例代码

启动

主应用

插入

输出

0 投票
1 回答
621 浏览

c# - MEF2轻量级系统。元数据组合

完全缺乏如何使用轻量级 MEF2 System.Composition 的示例,这使得这很棘手。我只使用System.Composition不是 System.ComponentModel.Composition)。

我想导入具有元数据的部件。我正在使用属性代码。不幸的是,当我尝试获得出口时,我得到了一个很大的空值。

MetadataAttribute: _

Export

ImportMany并过滤元数据:

Readers不幸的是,它是空的。这是此处的示例代码,但我可以在我的实际代码中看到没有元数据的部分,因此至少可以正常工作。

我应该怎么做才能填充Readers

我正在尝试以 .NET Standard 2.0 为目标并从 .NET Core 使用它。

0 投票
1 回答
556 浏览

wpf - 带有 MEF 2 的 WPF MvvM 中的插件

我尝试了以下非常好的教程https://www.eidias.com/blog/2013/7/26/plugins-in-wpf-mvvm-with-mef#cm-249迁移到 MEF2 但由于某种原因组件未显示在目录中。从 MEF2 我想使用 API 配置(RegistrationBuilder 类)(这里是一个例子:https ://stefanhenneken.wordpress.com/2013/01/21/mef-teil-11-neuerungen-unter-net-4-5/ ),也许有人知道如何将 MEF2 正确应用于本教程。非常感谢你。

这里是解决方案的概述: 解决方案概述

在 MainViewModel.cs 我还不知道如何将导入集成到RegistrationBuilder.Can 你检查其余的代码?谢谢。

这是两个插件:我已经在这里评论了导出,因为RegistrationBuilder. 在此处输入图像描述 在此处输入图像描述