zoukankan      html  css  js  c++  java
  • 在.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

  • 相关阅读:
    pip install selenium==版本号 报错
    解决phantomjs输出中文乱码
    phantomjs学习之网页访问测速
    phantomjs学习之截图
    bzoj1069-最大土地面积
    hdu4372-Count the Buildings
    bzoj3786-星系探索
    Codeforces633H-Fibonacci-ish II
    hdu3625-Rooms
    斯特林数
  • 原文地址:https://www.cnblogs.com/redmoon/p/5309160.html
Copyright © 2011-2022 走看看