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

.net core .net核心MEF 2非共享创建策略,.net-core,mef,mef2,.net Core,Mef,Mef2,我正在切换到.net core,并尝试将我的旧框架MEF代码迁移到新版本(Microsoft.Composition 1.0.31) 我们有几个类的创建策略为“非共享”。我一直在思考如何使用MEF 2和.net core应用以下属性: [PartCreationPolicy(CreationPolicy.NonShared)] 有人知道将上述属性设置为“NonShared”的.net core MEF 2等价物是什么吗?因为只有MEF 2被移植到.net core,所以我们只能访问System

我正在切换到.net core,并尝试将我的旧框架MEF代码迁移到新版本(Microsoft.Composition 1.0.31)

我们有几个类的创建策略为“非共享”。我一直在思考如何使用MEF 2和.net core应用以下属性:

[PartCreationPolicy(CreationPolicy.NonShared)]

有人知道将上述属性设置为“NonShared”的.net core MEF 2等价物是什么吗?

因为只有MEF 2被移植到.net core,所以我们只能访问System.Composition中的类型,而不能访问System.ComponentModel.Composition中的类型。因此,不可能像使用MEF 1那样设置该属性

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

因为我们快到万圣节了,所以我们有以下课程:

abstract class Monster { }

class It : Monster { }

class Zombie : Monster { }

class Wife : Monster { }
在MEF 2中,您需要创建ConventionBuilder以定义导出,如下所示:

var rules = new ConventionBuilder();
            rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>();
rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>()
                .Shared();
class TerrorContainer
    {
        [ImportMany]
        public IEnumerable<Monster> Monsters { get; set; }
    }

希望这有帮助

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

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

因为我们快到万圣节了,所以我们有以下课程:

abstract class Monster { }

class It : Monster { }

class Zombie : Monster { }

class Wife : Monster { }
在MEF 2中,您需要创建ConventionBuilder以定义导出,如下所示:

var rules = new ConventionBuilder();
            rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>();
rules.ForTypesDerivedFrom<Monster>()
                .Export<Monster>()
                .Shared();
class TerrorContainer
    {
        [ImportMany]
        public IEnumerable<Monster> Monsters { get; set; }
    }

希望这有帮助

您是否有一个单独导出具有特定签名的方法时使用SatisfyImports的示例?您是否有一个单独导出具有特定签名的方法时使用SatisfyImports的示例?