3

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

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

[PartCreationPolicy(CreationPolicy.Shared)]

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

4

2 回答 2

3

回答自己,因为没有收到答案,虽然没有一个很好的答案。

阅读多个帖子,似乎默认 CreationPolicy 是共享的,也就是单例。所以可能只是删除这一行就可以了。

MEF2 引入了导出工厂,可以查看以获取有关策略设置的更多详细信息。

于 2017-08-29T17:50:31.517 回答
2

解决方案是使用ConventionBuilder类。

假设有一个类被调用AppShell并且它实现了 interface IAppShell。为了以共享模式导出它,请按照以下步骤操作:

var conventionBuilder = new ConventionBuilder();
conventionBuilder.ForTypesDerivedFrom<IAppShell>()
    .Export<AppShell>()
    .Shared();

然后:

var config = new ContainerConfiguration()
    .WithAssemblies(new[]{ typeof(AppShell).Assembly}, conventionBuilder);
于 2018-10-12T15:39:33.727 回答