插件应用架构概述


基于LCLFramework插件框架的应用由以下三个部分构成:

(1)主程序:针对特定应用环境(Web、WinForm等应用环境),加载启动插件,获取插件入口,运行入口程序。

(2)插件:提供应用功能,实现对其它插件功能扩展并暴露功能扩展点。

(3)插件框架:与特定应用环境无关,实现插件功能组合与扩展。

主程序与插件的通讯


主程序可以通过插件框架LEnvironment来注册和获取服务。

服务在这里表述为:服务 = 接口/基类 + 实现类。

Plugin模式在示例中的实际目的小结一下


  1. Plugin模式是架构模式,在设计架构时,才有参考价值;
  2. Plugin模式主要是实现单一职责的封装,和扩展应用程序;
  3. 目前的插件框架主要是Kernel+Core Plugins组成的结构体系;

Plugin与扩展的区别


插件稍不同于扩展(extension),插件通常依赖于主应用程序的接口,有一个它们可以运行的确定的界限。扩展则通常有更少的限制,也可以提供它们自己的接口。相同的是,它们通常都用来减少主应用程序的大小、提供一些可选的功能。

这里不得不提到Mozilla Firefox 和相关软件。它们使用一个叫做Add-on的名词,Add-on又被细分为插件、主题(theme)、搜索引擎(search engine)和扩展。在以后的文章中将会提到Mozilla插件和古老的NPAPI的渊源,以及firefox中插件和扩展的区别。

LCLFramework框架之Plugin设计


LCLFramework框架之Plugin模式主要是参考http://www.cnblogs.com/zgynhqf/p/3356692.htmlhttp://mvcpluginframework.codeplex.com/框架来的。

1:定义插件程序集搜索目录 搜索/Plugins 和 /Plugins/Bin文件夹。

<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<probing privatePath="bin/Plugins;Plugins;Plugins/bin"/>

</assemblyBinding>

</runtime>

2:把Plugins文件夹下的文件复制到临时目录再加载程序集到内存。

3:执行插件自定义的Initialize函数来初始化插件本身。

ASP.NET MVC Plugin 设计


4:在插件程序集中加入 BuildManager.AddReferencedAssembly

5:定义PluginView视图。

6:插件控制器工厂PluginControllerFactory查找插件控制器。

7:定义插件开发常用功能,如:URL查找。

注意:

插件中的 web.config 文件是为了让 .cshtml 有智能感知提示

每个插件都需要有一个类(只能有一个)继承LCLPlugin来表示这是一个LCLPlugin

LCLFramework框架之Plugin开发


LCLFramework框架之MVC Plugin开发


public class HeatMeteringPlugin : LCLPlugin

{

public override void Initialize(IApp app)

{

Bundle = this;

Debug.WriteLine("HeatMeteringPlugin Initialize....");

app.AllPluginsIntialized += app_AllPluginsIntialized;

app.ModuleOperations += app_ModuleOperations;

}

void app_ModuleOperations(object sender, System.EventArgs e)

{

Debug.WriteLine("HeatMeteringPlugin app_ModuleOperations Meuns....");

CommonModel.Modules.AddRoot(new ModuleMeta

{

Label = "收费管理",

Image = "glyphicon glyphicon-bell",

Children =

{

new ModuleMeta{ Label = "面积收费", CustomUI="/HeatMeteringPlugin/HMBase/Index"},

new ModuleMeta{ Label = "计量收费", CustomUI="/HeatMeteringPlugin/Village/Index"},

new ModuleMeta{ Label = "欠费催缴", CustomUI="/HeatMeteringPlugin/HMBase/Index"},

}

});

}

void app_AllPluginsIntialized(object sender, System.EventArgs e)

{

Debug.WriteLine("HeatMeteringPlugin app_AllPluginsIntialized IOC....");

//注册IOC

ServiceLocator.Instance.Register<DbContext, AppDbContext>();

ServiceLocator.Instance.Register<IRepository<Village>, EntityFrameworkRepository<Village>>();

}

}

LCLFramework框架之Plugin部署


B/S部署:直接把插件发布到网站上的Plugins目录下。

应用程序部署:直接把插件复制到应用程序的Plugins目录下。

C/S部署:<add key="DataPortalProxy" value="LCL.DataPortal.DataPortalClient.WcfProxy,LCL"/>

单机部署:

LCLFramework框架之Plugin模式的更多相关文章

  1. LCLFramework框架之Service模式

    Service模式介绍 领域中的一些概念不太适合建模为对象,即归类到实体对象或值对象,因为它们本质上就是一些操作,一些动作,而不是事物.这些操作或动作往往会涉及到多个领域对象,并且需要协调这些领域对象 ...

  2. LCLFramework框架之Repository模式

    Respository模式在示例中的实际目的小结一下 Repository模式是架构模式,在设计架构时,才有参考价值: Repository模式主要是封装数据查询和存储逻辑: Repository模式 ...

  3. LCLFramework框架 1.1 Pre-Alpha 源码公布

    使用开发框架的好处:1.框架在技术上为软件系统提供了完整的模式实践2.框架为团队提供了合理可行的软件开发过程模式3.框架的应用大大提高了团队的开发效率,团队只需要关注与领域相关的业务实现,而无需关注具 ...

  4. EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. Entity Framewo ...

  5. LCLFramework框架之数据门户

    LCLFramework框架之数据门户职责 形成统一的数据访问方式. LCLFramework框架之数据门户设计 数据门户分为客户端/服务端.    LCLFramework框架之数据门户设计代码 数 ...

  6. LCLFramework框架之IOC

    我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 借助于"第三方"实现具有依赖关系的对象之间的解 ...

  7. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  8. web开发中的MVC框架与django框架的MTV模式

    1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...

  9. [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

随机推荐

  1. MySQL调优参数

    key_buffer_size 含义:用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写). 影响:对于MyISAM表的影响不是很大,MyISAM会使用系统的缓存来存储数据,所以大量 ...

  2. First Blog, “Hello, world!”

    As every single book says as a tradition, "Hello, world!" An explanation about the name – ...

  3. DM9000网卡驱动接受数据从中断方式改成NAPI方式小记

    平台是最最经典的s3c2440了,说了要做这件事情很久了,就是改几行代码,一直没有做.前几天逼了自己一下,终于给做了,拖延症患者伤不起. 以下是需要读者对napi机制有所熟悉: step1:在boar ...

  4. 分分钟用上C#中的委托和事件之窗体篇

    上次以鸿门宴的例子写了一篇名为<分分钟用上C#中的委托和事件>的博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用 ...

  5. 第十二章:Android数据存储(下)

    一.SQLite介绍 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基于数据库的应用.Android的数据 ...

  6. [游戏模版8] Win32 透明贴图

    >_<:The same with previous introduction. In the InitInstance fanction make a little change: &g ...

  7. Linux:Vim

    模式介绍: Vim具备6种基本模式和5中派生模式. 普通模式 启动后的默认模式,用于:移动光标.删除文本等待,常用命令: dd:删除当前行. [number]dd:连续执行number对应次数的dd命 ...

  8. 原生JavaScript事件详解

    JQuery这种Write Less Do More的框架,用多了难免会对原生js眼高手低. 小菜其实不想写这篇博客,貌似很初级的样子,但是看到网络上连原生js事件绑定和解除都说不明白,还是决定科普一 ...

  9. 《.NET 编程结构》专题汇总(C#)

    前言     掌握一门技术,首要的是掌握其基础.     笔者从事.NET相关开发多年,也非常喜欢.NET,多年来也积累了很多相关的资料,在此将一些基础性的知识整理成专题,分享之.   导航 基础编程 ...

  10. Atitit.实现继承的原理and方法java javascript .net c# php ...

    Atitit.实现继承的原理and方法java javascript .net c# php ... 1. 实现继承的问题 1 2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象 1 ...