首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用MEF 2构成出口价值

用MEF 2构成出口价值
EN

Stack Overflow用户
提问于 2016-02-10 16:55:09
回答 2查看 1.6K关注 0票数 2

使用MEF 1,可以使用ComposeExportedValue(.)-Method (container.ComposeExportedValue...)将现有对象组合到容器中。如何使用Microsoft.Composition (Mef2)来完成这一任务?我找不到任何方法来达到这个目的。

EN

回答 2

Stack Overflow用户

发布于 2016-03-03 22:56:48

我会试试这个的。当然,我在学习MEF 2之前只有一周的时间,因为我对MEF 1的接触是有限的。所以,请考虑以下的答案,因为这可能是完全错误的。此外,我发现文档非常糟糕,过时了,因此到目前为止,这是一场艰苦的战斗。

在我的解决方案中,我使用了ExportDescriptorProvider并将其扩展为InstanceExportDescriptorProvider,如下代码所示。

(请注意,这应该被视为概念的证明,而不是最终的代码!)

代码语言:javascript
运行
复制
public class InstanceExportDescriptorProvider : ExportDescriptorProvider
{
    readonly object instance;

    public InstanceExportDescriptorProvider( object instance )
    {
        this.instance = instance;
    }

    public override IEnumerable<ExportDescriptorPromise> GetExportDescriptors( CompositionContract contract, DependencyAccessor descriptorAccessor )
    {
        if ( contract.ContractType.IsInstanceOfType( instance ) )
        {
            yield return new ExportDescriptorPromise( contract, contract.ContractType.FullName, true, NoDependencies, dependencies => ExportDescriptor.Create( ( context, operation ) => instance, NoMetadata ) );
        }
    }
}

支持测试(使用xUnit 2.0AutoFixture配对)显示将如何使用该测试如下:

代码语言:javascript
运行
复制
[Theory, AutoData]
public void VerifyInstanceExport( Assembly[] assemblies )
{
    using ( var container = new ContainerConfiguration()
        .WithProvider( new InstanceExportDescriptorProvider( assemblies ) )
        .CreateContainer() )
    {
        var composed = container.GetExport<Assembly[]>();
        Assert.Equal( assemblies, composed );
    }
}

在我的例子中,我希望能够访问传递到ContainerConfiguration中的程序集(在上面的示例中没有看到/测试),所以这就是为什么我要用程序集进行测试。

希望这足以让你上路。或者的方式,在任何情况下。

票数 3
EN

Stack Overflow用户

发布于 2016-02-23 05:43:54

https://mef.codeplex.com/

System.Composition.*_是MEF的轻量级版本,它针对静态组合场景进行了优化,并提供了更快的组合。

据我所知,根据我的经验,System.Composition不支持动态组合。如果需要这样的功能,就必须使用标准的MEF (System.ComponentModel.Composation.*)。

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

https://stackoverflow.com/questions/35321270

复制
相关文章

相似问题

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