在
构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的。为什么要派生于IServiceContainer呢?我们来看看IServiceContainer的定义,它有几个AddService方法和RemoveService方法以及从IserviceProvider继承过来的GetService方法。Service本身是.NET设计时架构的基础,Service提供设计时对象访问某项功能的方法实现,说起来还真拗口。就我看来,ServiceContainer机制的本质就是解耦合,就是将类型的设计时功能从类型本身剥离出来。如果你把类型的设计时功能也封装到类型里,这样的类型包含了很多只有开发人员才会用到而最终用户根本不需要的功能,使得类型既臃肿有不便于扩展。而将设计时功能剥离出来,这样类型就可以不依赖于特定的设计环境,之所以现在有这么多非官方的.NET设计环境可能就是这个原因吧。
我们的插件式的应用程序框架正好也需要这样一个松散的架构,我就移花接木把它应用到我们的框架中。
ServiceContainer是.NET提供的IserviceContainer的实现,如果没有特殊的需要我们不必扩展它,而是直接的利用它。在上一篇文章中我们在实现IApplication接口的时候就直接使用的ServiceContainer。我们在使用Service架构的时候,总是倾向于有一个根容器,各个Service容器构成了一个Service容器树,每一个节点的服务都可以一直向上传递,直到根部,而每一个节点请求Service的时候,我们总是可以从根节点获得。我把这个根节点比喻成一个服务中心,它汇总了所有可提供的服务,当某个对象要请求服务(GetService)只需要向根结点发送要获得的服务,根结点就可以把服务的对象传递给它。
从另外一个角度看,ServiceContainer为我们的插件是应用程序提供了有力的支持,利用ServiceContainer,你不但可以获得应用程序所提供的所有的功能,而且你还可以通过插件向应用程序添加Service,而你添加的Service又可以服务另外的Service,这样我们的应用程序框架就更加的灵活了。但是任何东西都是有两面性的,带来灵活的同时也为开发人员的工作增加了复杂度,所以使用ServcieContianer开发的应用程序必须提供足够详细的文档,否则开发人员可能根本不知道你到底有多少Service可以用,因为很多的Service是通过插件提供的,可能应用程序的作者都不会知道程序发布以后会出现多少Service。
写了这么多,可能接触过ServiceContainer的朋友已经觉得罗唆了,没接触过的还是觉得说得莫明其妙。有空接着写,我会创建几个简单的服务演练演练,增强一下感性认识,呵呵。
分享到:
相关推荐
总之,构建插件式的应用程序框架并实现视图服务是一项具有挑战性的任务,但通过良好的设计和实施,我们可以得到一个强大且灵活的系统,能适应不断变化的业务需求和用户期望。在这个过程中,接口设计、插件注册、动态...
在.NET平台上构建插件式应用是一种常见的软件设计模式,它允许开发者将应用程序的核心功能与可扩展的模块分离,这些模块即插件。这种方式使得应用程序能够根据需求动态加载和卸载功能,增强了软件的灵活性和可维护性...
SpringBoot插件式开发框架是基于SpringBoot框架构建的一种创新性开发模式,旨在解决系统动态扩展和模块化管理的问题。这种框架充分利用了SpringBoot的简洁、高效特性,为开发者提供了快速构建可插拔功能的能力。下面...
本文通过介绍插件式GIS应用框架的设计与实现,探讨了如何利用C#和AE+9.2技术构建一个高效、灵活的GIS应用平台。通过模块化的插件设计、高性能的插件引擎以及功能完善的宿主程序,实现了GIS应用的高度可定制性和扩展...
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web ...
插件既可以声明具体功能作为属性或方法,也可以将应用程序接口声明为服务容器,从而增强应用程序的可扩展性。 此外,论文还介绍了一些关键的技术和策略,比如ServiceLocator模式和抽象工厂模式,这些模式能够帮助...
总结来说,结合WPF、Caliburn.Micro和MEF,我们可以构建一个高度可扩展的应用程序框架,允许开发者轻松地添加、修改和删除功能模块。这种架构方式在大型企业应用或需要频繁迭代的项目中尤其有用,因为它促进了代码的...
在IT行业中,C#插件开发框架是一种用于构建可扩展应用程序的重要工具。它允许开发者创建模块化的、可插入的功能部件,这些部件可以在运行时被加载和卸载,从而增加了软件的灵活性和可维护性。本文将深入探讨C#插件...
此插件旨在简化与金蝶容器的集成,使开发者能够在开发环境中直接部署和调试应用,而无需离开IDE。 2. **插件安装** 安装金蝶插件的过程相当直观。首先,打开IntelliJ IDEA,然后进入"File" -> "Settings",在设置...
AutoFac 是一个流行的轻量级依赖注入(Dependency Injection,DI)框架,广泛应用于...通过理解 AutoFac 的基本原理和插件化开发的核心思想,开发者可以构建出更加灵活和可扩展的应用程序,适应不断变化的业务需求。
它提供了一整套服务、APIs以及协议,使企业能够构建基于Java技术的分布式计算应用程序。JavaEE框架项目通常包含了用于搭建大型、可伸缩、安全、多层化网络应用的中间件以及运行环境。 在本次项目资源中,我们看到了...
总之,组件化、容器化和插件化是现代软件开发的关键技术,它们对于构建可扩展、可维护的应用至关重要。通过深入学习这些知识,开发者可以提升自己的技术水平,设计出更优秀、更适应未来需求的软件产品。
3. WebMVC:这是Spring框架提供的用于构建Web应用程序的模块。它提供了模型-视图-控制器(MVC)架构的实现,并提供了一套完整的解决方案,包括路由、数据绑定、验证以及视图解析等。 Spring框架的设计哲学强调了...
### 使用Spring Boot构建应用程序知识点详解 #### 一、Spring Boot简介 Spring Boot 是一款基于Spring框架的快速应用开发工具包,旨在简化新Spring应用程序的初始搭建以及开发过程。该框架利用一种初始约定优于配置...
总的来说,C#插件框架提供了一种灵活的方式来构建可扩展的应用程序,允许开发者轻松地添加新功能,同时保持代码的整洁和模块化。理解并掌握这一技术,对于提升C#应用程序的可维护性和适应性具有重要意义。
本文将深入探讨一个名为"SuperSocket"的框架,它是一个专为.NET开发者设计的轻量级、跨平台且高度可扩展的Socket服务器应用程序框架。 一、SuperSocket简介 SuperSocket以其轻量级的特性脱颖而出,它不依赖于任何...
3. **插件架构**:构建插件式的应用程序框架需要一个清晰的结构,确保插件与主应用程序之间的交互顺畅。这通常涉及定义公共接口或基类,让插件实现这些接口以提供服务,而主程序则通过这些接口与插件进行通信。 4. ...
这个“WPF MvvM 使用 MEF 构建插件Demo”就是展示如何在WPF应用中利用MvvM模式和MEF来构建可扩展的插件系统。 **WPF与MvvM模式** WPF是一个基于.NET Framework的UI框架,它提供了丰富的图形效果和数据绑定功能。...
这三者构成了Java Web开发中的核心组件,用于构建高效、可维护的后端应用。让我们深入了解一下这些框架及其整合。 **Spring框架**:Spring是Java企业级应用的事实标准,提供了一个全面的编程和配置模型,用于简化...
Spring框架是一个开源的Java框架,旨在为构建企业级应用程序提供一个全面的基础架构支持。Spring框架的核心价值在于它能极大地提高应用程序的开发效率,降低系统的复杂度,并且使程序更加易于维护。 **1.2 Spring...