码迷,mamicode.com
首页 > Web开发 > 详细

osgi.net从入门到精通系列之六

时间:2018-11-07 23:01:37      阅读:458      评论:0      收藏:0      [点我收藏+]

标签:文件   没有   依赖   image   组成   就是   名称   loading   span   

模块类型空间

模块类型空间是指该模块可以访问的类型集合,它通过模块清单文件的Runtime节点来配置。模块 类型空间由两部分组成,一部分是模块本地的程序集,另一部分是模块依赖其它模块的程序集,它们分别 在Runtime节点下的Assembly和Dependency节点来定义。模块本地程序集是一些指定路径的.dll文件,而 依赖程序集则是依赖于其它模块共享的本地程序集。Dependency节点需要指定依赖的程序集所在的模块和 具体的程序集名称。需要注意的是,如果在Dependency中没有指定具体的程序集,则意味着这个模块依赖 于另一个模块的所有程序集。因此,这种依赖将可能是循环依赖。

如果一个宿主模块还包含了附加模块,那么,宿主模块的类型空间还包括在所有片段中的类型空间。 具体来说,一个模块的类型空间由以下部分组成:

  • 本地程序集
  • 片段模块本地程序集
  • 依赖的程序集
  • 片段模块依赖的程序集
  • 依赖的模块
  • 片段模块依赖的模块

技术分享图片依赖与解析

在UIOSP框架,一个模块可以直接复用另一个模块的共享程序集中的类型。一旦发生垮模块类型复用, 就意味着一个模块对另一个模块产生了依赖。我们可以通过在清单文件Runtime配置节点下声明一个 Dependency配置节点来依赖另一个模块的某个程序集或者所有程序集。为了确保一个模块在运行过程中不 会出现无法加载依赖的类型的异常,在启动前我们必须确保模块依赖的程序集存在。解析就是检查一个模块 所有依赖的程序集是否都存在的过程。只有当模块依赖的程序集存在且依赖程序集所在模块也解析成功, 这个模块才能被正常使用。

技术分享图片模块类加载器与类型加载

在UIOSP,每一个模块都具备独立的类型空间,而模块类加载器通过对CLR类加载器进行扩展,实现 模块隔离的类型加载。该加载器,确保我们只能在一个模块的类型空间中加载类型。模块类加载器的功能 通过IBundle接口的LoadClass和LoadResource这两个方法访问。当从模块加载一个类型时,它会依照图4-11 顺序来加载类型。

 

图4-11 模块类加载顺序
技术分享图片

osgi.net从入门到精通系列之六

标签:文件   没有   依赖   image   组成   就是   名称   loading   span   

原文地址:https://www.cnblogs.com/iwanwu/p/9926183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!