使用 MEF 2 组合导出值

2024-02-25

使用 MEF 1,可以使用 ComposeExportedValue(...)-Method 将现有对象组合到容器中(container.ComposeExportedValue...)。如何使用 Microsoft.Composition (MEF 2) 来完成此操作?我找不到任何用于此目的的方法。


我会尝试一下这个。当然,在对 MEF 1 进行了一些有限的接触之后,我自己只学习了大约一周的 MEF 2。因此,请考虑以下答案,因为它可能是完全错误的。另外,我发现文档非常差且过时,因此到目前为止,从各个方面来说这都是一场艰苦的战斗。

在我的解决方案中,我利用了ExportDescriptorProvider https://github.com/dotnet/corefx/blob/master/src/System.Composition.Hosting/src/System/Composition/Hosting/Core/ExportDescriptorProvider.cs并将其扩展为InstanceExportDescriptorProvider如下面的代码所示。

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

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.0 https://xunit.github.io/汽车夹具 https://github.com/AutoFixture/AutoFixture/)来展示如何使用它,如下所示:

[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(在上面的示例中没有看到/测试)这就是我使用程序集进行测试的原因。

希望这足以让您继续前进。或者some无论如何。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MEF 2 组合导出值 的相关文章

  • 没有使用 Angular 2 和 Http 服务的 XHRBackend 提供程序

    我正在构建一个基于 angular2 生成 angularcli webpack scss 和面向模块的项目 对于 http 请求 我决定创建一个由身份验证服务使用的服务 全部在 CoreModule 中引用 import NgModule
  • 使用另一个 MEF 程序集中的类而不引用它

    我有 2 个 MEF 组件 设其为A成分和B成分 我需要的是能够从组件 A 中的组件 B 访问一个类 而不需要引用它 然后我想手动实例化该类的对象 目前我看到 MEF 允许使用 Import 自动实例化对象 它使用需要引用的接口 我可以使用
  • Angular 2 Renderer2 - 它是如何工作的

    我试图理解在 Angular 2 的指令或组件中添加 renderer2 装饰的必要性 来自文档 渲染器2文档 https angular io api core Renderer2他们没有提供其工作原理的示例 谁能用完整的例子解释一下 请
  • 使用 DbContext 接口注册 AspNetCore 2.1 Identity 系统

    我正在开发 Asp Net Core 2 1 Web Api 我在用Microsoft Extensions DependencyInjection AspNetCore Identity and EntityFrameworkCore 在
  • 创建新实例,同时仍然使用依赖注入

    环境的快速描述 我有一个代表聊天室并依赖于记录器的类 它与具有横切关注点的系统范围记录器不同 而是与特定聊天室绑定的记录器 它将该聊天室中的所有活动记录到其唯一的日志文件中 当聊天室创建时 我想打开日志文件 当聊天室被销毁时 我想关闭日志文
  • 获取在 Unity 中实现接口的所有类型

    如果您只想知道解决方案 请跳至更新 我有一个应用程序 它使用以下代码来获取并运行许多工作方法 var type typeof IJob var types AppDomain CurrentDomain GetAssemblies Sele
  • Laravel 5 包中依赖注入的最佳方法

    我正在为 Laravel 5 开发一个包 现在我需要受益于依赖注入来拥有一个更具可扩展性和可靠性的应用程序 我不知道最好采用哪种方法以及为什么 这是我的一段代码 我需要注射Lang类依赖 class MyController extends
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • 以编程方式注入依赖项asp.net core

    我刚刚开始Asp net core 依赖注入 我的概念可能不准确 这篇 docs asp net 帖子 https docs asp net en latest mvc controllers dependency injection ht
  • 通用接口依赖注入工厂

    我正在玩 DI 和 Ninject 我愿意征求有关如何以其他方式解决此问题的建议 我试图确保 ICreateOrders 的具体实现可以被替换 如果需要的话 也许还有另一种方式或模式 像这样的解决方案 C Ninject IoC 和工厂模式
  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 有状态对象的 IoC 依赖注入(非全局)

    我是这个 IoC 和 DI 业务的新手 我觉得如果你传递的是全局范围的对象 我就明白了这个概念 但是当你需要传递一个全局范围的对象时 我不明白它是如何工作的特定的逻辑状态 因此 例如 如果我想将一个人对象注入到一个写入文件命令对象中 我如何
  • Guice:当 FactoryBuilder 中提供合适的构造函数时,“找不到合适的构造函数”

    我使用 Guice 进行依赖注入 但收到此错误 1 Could not find a suitable constructor in java lang Void Classes must have either one and only
  • 需要 WCF 的完整 DI 示例

    有人有完整且有效的 WCF DI 示例吗 Every http www eggheadcafe com tutorials aspnet b428fb65 08b4 45c8 97cd 47ee1a1eaf41 composing wcf
  • 依赖注入容器——工厂模式

    我一直在尝试了解依赖注入 并一直在阅读并尝试编写一个类似于以下内容的小型依赖注入容器 http fabien potencier org article 12 do you need a dependency injection conta
  • EJB:无接口的依赖注入

    我有这个代码 Local interface IRepo Stateless class Repo implements IRepo class WebS EJB private IRepo repo 并且一切正常 但现在我删除了界面IRe
  • @Inject 和 @PostConstruct 不适用于单例模式

    我有一堂课如下 public class UserAuthenticator private static UserAuthenticator authenticator Inject private UserRepository user
  • 何时使用接口,何时使用高阶函数?

    给定一个具有以下层的 ASP NET MVC 应用程序 UI 视图 CSS Javascript 等 控制器 服务 包含业务逻辑和数据访问 没有单独的数据访问层的原因是我正在使用 SQL 类型提供程序 以下代码可能不起作用 因为它只是原始草
  • 在 ASP.NET Core 的中间件中注入服务

    我想根据 HTTP 标头值注入服务 所以我有 2 个类 DbDataProvider 和 InMemDataProvider 它们都是从 IDataProvider 实现的 每当进行 API 调用时 客户端都会传递一个标头 该标头确定是需要

随机推荐