首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net核心mef2 NonShared创建策略

.net核心mef2 NonShared创建策略
EN

Stack Overflow用户
提问于 2017-10-04 15:48:28
回答 1查看 1.5K关注 0票数 1

我正在切换到.net核心,并试图将我的遗留框架MEF代码迁移到新的Microsoft组合(MEF 2) (Microsoft.Composition 1.0.31)。

我们有几个类,其创建策略是"NonShared“。在如何使用带有.net核心的MEF 2应用以下属性时,我陷入了困境:

代码语言:javascript
复制
[PartCreationPolicy(CreationPolicy.NonShared)]

有人知道什么是.net核心mef2等效设置上述属性为“非共享”吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 18:13:18

由于只有mef2已经移植到System.Composition核心,所以我们只能访问System.ComponentModel.Composition.中的类型,而不是System.ComponentModel.Composition.中的类型。因此,不可能像以前使用MEF 1那样设置该属性。

不过,您可以为通过API定义的每个导出设置部件创建策略。

既然我们快到万圣节了,让我们假设我们有这样的课程:

代码语言:javascript
复制
abstract class Monster { }

class It : Monster { }

class Zombie : Monster { }

class Wife : Monster { }

在MEF 2中,您需要创建一个ConventionBuilder以挫败您的导出,如下所示:

代码语言:javascript
复制
var rules = new ConventionBuilder();
            rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>();

这里有趣的部分是,在默认情况下,非共享创建策略是强制的,因此不需要属性。让我们来测试一下:

代码语言:javascript
复制
var config = new ContainerConfiguration()
                .WithAssemblies(new[]{ typeof(Monster).GetTypeInfo().Assembly}, rules);

var container = config.CreateContainer();
var monsterA = container.GetExports<Monster>().First();
var monsterB = container.GetExports<Monster>().First();
Console.WriteLine(monsterA == monsterB);

现在,由于默认情况下,我们不强制在导出中共享,这将写入控制台False

为了执行共享,我们只需将.Shared()添加到.Export之后的方法链中,如下所示:

代码语言:javascript
复制
rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>()
                .Shared();

如果我们再次运行测试,我们将得到True,因为现在两个实例都指向相同的引用。

对于组成部件,您可以这样做:

代码语言:javascript
复制
class TerrorContainer
    {
        [ImportMany]
        public IEnumerable<Monster> Monsters { get; set; }
    }

无论你在哪里作曲,你都会写:

代码语言:javascript
复制
    var terrorContainer = new TerrorContainer();
    container.SatisfyImports(terrorContainer);

希望这能有所帮助!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46569078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档