在.NET Core中使用MEF

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:微软的可托管扩展框架也移植到.NET Core上了。

可托管扩展框架(Managed Extensibility Framework,MEF)是微软为大型应用程序(比如Visual Studio这样的东西)提供的一个功能扩展框架,通过一个混合层提升了灵活性、维护性和可测试性。MEF既可以用于第三方插件支持扩展功能(我曾经开发的eBalance就是使用MEF实现插件功能),也能为常见的应用程序带来松耦合插件架构的好处。MEF最早是作为一个开源的扩展库发布,后来直接融合到.NET Framework中一起发布,所谓的命名空间(System.*.Composition)就是它了。

当然,由于历史原因,MEF现存两个版本:

  1. 一个是同.NET 4.0和Silverlight 4及其更高版本内置的,命名空间为System.ComponentModel.Composition。这个版本提供了标准的扩展模型,也是VS使用的。
  2. 另外一个是通过Nuget发布的轻量级的支持可移植的版本,针对静态混合进行了优化,提供了更快的混合过程,你可以认为这是MEF2,命名空间是System.Compostion,可以被用于手机、商店应用、桌面和Web应用之中。

而现在移植到.NET Core的版本只是MEF2(这是理所当然的),没有Catalog可用,源代码在此:https://github.com/dotnet/corefx/tree/master/src

要使用MEF也很简单,直接通过Nuget添加就行:http://www.nuget.org/packages/Microsoft.Composition/

如果只是想自动加载Assembly的话,.NET Core虽然没有再提供AppDomain还是提供了类似概念的东西,即AssemblyLoadContext。不过动态加载程序集在.NET Native下可能会有问题,因为并没有JIT的存在。

如何在.NET Core中使用MEF的具体代码,可以参考Ricardo Peres的博文:http://weblogs.asp.net/ricardoperes/using-mef-in-net-core

时间: 2024-10-15 00:39:01

在.NET Core中使用MEF的相关文章

【.NET 深呼吸】.net core 中的轻量级 Composition

记得前面老周写过在.net core 中使用 Composition 的烂文.上回老周给大伙伴们介绍的是一个“重量级”版本—— System.ComponentModel.Composition.应该说,这个“重量级”版本是.NET 框架中的“标配”. 很多东西都会有双面性,MEF 也一样,对于扩展组件灵活方便,同时也带来性能上的一些损伤.但这个损伤应只限于应用程序初始化阶段,一般来说,我们也不需要频繁地去组合扩展,程序初始化时执行一次就够了.所以,性能的影响应在开始运行的时候. 与“重量级”版

.NET Core中ADO.NET SqlClient的使用与常见问题

一.简介 在很多要求性能的项目中,我们都要使用传统的ADO.NET的方式来完成我们日常的工作:目前有一些网友问有关于.NET Core操作SQL Server的问题在本文中解答一下. 本文旨在指出,在.NET Core中使用ADO.NET SqlClient操作SQL SERVER数据库时的一些常见的问题,在本文的第三部分,如果只关心解决问题,请跳过第两部分进行阅读. 二.使用ADO.NET 首先建立好一个ASP.NET MVC Core Project 或 .NET Core Class Li

[翻译]在 .NET Core 中的并发编程

原文地址:http://www.dotnetcurry.com/dotnet/1360/concurrent-programming-dotnet-core 今天我们购买的每台电脑都有一个多核心的 CPU,允许它并行执行多个指令.操作系统通过将进程调度到不同的内核来发挥这个结构的优点.然而,还可以通过异步 I/O 操作和并行处理来帮助我们提高单个应用程序的性能.在.NET Core中,任务 (tasks) 是并发编程的主要抽象表述,但还有其他支撑类可以使我们的工作更容易. 并发编程 - 异步 v

Asp.net core中的websocket

Websocket是html5后的产物,对于asp.net core中也得到了支持,首先在NuGet中添加Microsoft.AspNetCore.WebSockets的引用(现在是1.0.1版本,2017年3月7日发布的). 首先在Configure中添加中间件 //添加websocket中间件 app.UseWebSockets(); 接下来就要定义自己处理websocket的中间件了,代码如下: using Microsoft.AspNetCore.Http; using System;

NET Core中怎么使用HttpContext.Current

NET Core中怎么使用HttpContext.Current 阅读目录 一.前言 二.IHttpContextAccessor 三.HttpContextAccessor 回到目录 一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目前是不可用的,因为ASP.NET Core中是并没有这个API的. 当然我们也可以通过在Controller中访问

ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】

通过上一篇的介绍我们应该对实现在ServiceProvider的总体设计有了一个大致的了解,但是我们刻意回避一个重要的话题,即服务实例最终究竟是采用何种方式提供出来的.ServiceProvider最终采用何种方式提供我们所需的服务实例取决于最终选择了怎样的ServiceCallSite,而服务注册是采用的ServiceDescriptor有决定了ServiceCallSite类型的选择.我们将众多不同类型的ServiceCallSite大体分成两组,一组用来创建最终的服务实例,另一类则与生命周

如何在ASP.NET Core中应用Entity Framework

注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity Framework 首先为大家提醒一点,.NET Core和经典.NET Framework的Library是不通用的,包括Entity Framework! 哪怎么办? 别急,微软为.NET Core发布了.NET Core版本的Entity Framework,具体配置方法与经典.NET Framew

如何在ASP.NET Core中实现一个基础的身份认证

注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ASP.NET终于可以跨平台了,但是不是我们常用的ASP.NET, 而是叫一个ASP.NET Core的新平台,他可以跨Windows, Linux, OS X等平台来部署你的web应用程序,你可以理解为,这个框架就是ASP.NET的下一个版本,相对于传统ASP.NET程序,它还是有一些不同的地方的,比

ASP.NET Core中使用xUnit进行单元测试

单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多说了,有单元测试的做兜底的项目,好比给开发人员买了份保险,当然这个保险的质量取决于单元测试的质量,那些一路Mock的单元测试,看起来很美,但是什么都cover不到.目前工作中的一个老项目,有2万多个单元测试用例,其中不少是用心之作,真正落实到了业务逻辑,开发人员可以放心的去修改代码,当然一切都必须按