zoukankan      html  css  js  c++  java
  • 基于.NET MVC的高性能IOC插件化架构(二)之插件加载原理

    上一篇博文简单介绍了下插件化的代码组成部分:http://www.cnblogs.com/gengzhe/p/4390932.html,源码地址:https://github.com/luohuazhiyu/sunmvc

    这篇博客主要讲解下插件化实现的原理,先面先讲解几个概念:

    一、契约

      插件与系统必须有契约,系统才能发现插件并正确加载插件,我采用的是所有插件都实现Sun.Core里面的IPlugin接口。

    二、自述

      插件在被加载的时候,需要告诉系统,我是什么类型的插件,我的guid,我依赖的程序集,我的状态与权限,我的配置信息等等,这个行为是插件的自我描述,简称自述。

    三、配置

      插件必须能够进行配置(一般在安装的时候或者才系统启动之前进行配置),插件配置的使用过程大致为:系统发现插件-》加载插件-》加载插件配置文件-》把配置信息传入插件内实现了IPlugin接口的类对插件进行初始化。

    ---------------------------------------------------------------------------------------

    插件使用流程:插件开发(也可通过插件仓库下载需要的插件)-》插件zip文件上传-》配置插件-》启用插件

    有了流程,我顺着流程一步一步分析实现原理:

    一、插件开发

      1.所开发的插件必须有一个类实现Sun.Core里面的接口,这个接口里面包含初始化、启动、停止、卸载几个方法,因为只有插件自己才了解自己,所以这些功能需要插件自己提供,系统只负责使用。

      2.插件必须提供PluginConfig.Json文件,这里面的配置文件有固定的格式,用于向系统提供配置信息及保存用户的设置。

    二、插件上传

      step1:插件压缩为zip文件,上传保存到PluginZips文件夹下面。

      step2:自动解压缩插件文件到PluginTemp(插件检测临时目录)。

      step3:检测插件是否包含IPlugin的实现以及是否包含PluginConfig.Json文件,如果存在继续往下执行,如果不存在则删除临时文件以及zip文件,并反馈插件错误信息。

      step4:通过插件配置文件,拷贝到Plugins(插件存放目录)下的相应插件类别目录下面。

      .....(加载插件)

    三、插件加载

      1、系统启动加载

      step1:遍历Plugins目录下面的所有插件文件,读取PluginConfig对象列表并把列表信息保存到插件管理器里面以便管理调用。

      step2:筛选掉PluginConfig里面状态标识为error的插件。

        step3:把插件程序集及依赖的不存在系统bin目录下的程序集加载到App_Data目录下的Plugins目录下(便于统一加载及不影响到原Plugins目录下插件的修改、删除)。

      step4:加载Plugin程序集及依赖程序集(如果使用IOC,需要把程序集注册到IOC容器)。

      step5:调用程序集下IPlugin的实现类,执行初始化,如果插件状态为启动,可直接启动插件。

      2、上传插件加载(单个)

      上传插件的加载与启动加载的不同之处在于前者不需要遍历,其它步骤一样。

      备注:如果使用IOC容器,那么这里需要把新增的这些程序集注册到IOC容器并重置容器。

    四、插件管理

      因为在插件加载的过程中,插件的配置信息及IPlugin对象都已保存,这里就比较简单。通过列表可以筛选启动、停用、异常的插件,并可以直接调用IPlugin对象来启动、停用、卸载插件。

    今天就简单介绍到这里,后续的文章会越来越细。

      

     

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/gengzhe/p/4395716.html
Copyright © 2011-2022 走看看