轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(2)--配置

先把Netop.Core的最核心部分“对象查找服务”放一放,先说说应用系统的配置。

一个应用系统的配置是少不了的,除非你是一个纯硬代码族顽固者。

也见过有的应用系统通过系统提供的健值(key-value)方法在appSettings节点下设了几十个甚至上百个,不堪入目,更别说条理性了。

开发一个应用框架,配置一般是少不了,如log4net就有自己的配置,不会让你在appSettings设几十个条目。

开发配置是很简单的,下面慢慢说来。

在NET应用中,配置信息以XML文档储存。WEB应用为Web.config文件,可执行文件为*.exe.config(编译时由app.config复制并改名)。

在NET中,配置文件的信息经实现System.Configuration.IConfigurationSectionHandler接口的处理器类读出,其接口只有一个方法:

object Create(Object parent, object configContext, XmlNode section);

在Netop.Core中,实现的配置处理器类是Netop.Core.Configuration.ConfigurationHandler.

实现了配置处理器类,就获得了此节点的XML信息,再对它进行解析读出其相关内容即可。在Netop.Core中,ConfigurationHandler把这个工作交给了Netop.Core.Configuration.AppConfigurationManager。

看看实际的配置信息就清楚了:

<configSections>

<section name="Netop.Application" type="Netop.Core.Configuration.ConfigurationHandler,Netop.Core" />

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

</configSections>

这里可以看出,log4net的配置处理器类是log4net.Config.Log4NetConfigurationSectionHandler

Netop.Core的配置处理器类是Netop.Core.Configuration.ConfigurationHandler,节点名为Netop.Application,再看Netop.Application段:

<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">

<Application.ObjectLocator>

<DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>

<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>

<AspectAgentName>AppAspect</AspectAgentName>

</Application.ObjectLocator>

<Application.Log>

<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>

<LogParameter>Log</LogParameter>

</Application.Log>

<Application.Agent>

<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Service.xml</File>

</Agent>

<Agent name = "AppAspect"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Aspect.xml</File>

</Agent>

<Agent name = "AppEntity"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Entity.xml</File>

</Agent>

</Application.Agent>

</Netop.Application>

<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">中type的值即是AppConfigurationManager。

在Netop.Core中,有一个类Netop.Core.Configuration.SettingConfiguration实现读取类似“<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>”这样的信息。

对于SettingConfiguration,Netop.Core有个默认的节点:

<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">

……

<Application.Settings>

……

</Application.Settings>

</Netop.Application>

如在Application.Settings加项目如:<Host>smtp.sohu.com</Host>

使用则为:Netop.Core.Configuration.AppConfiguration.Current.ApplicationSettingsConfig.GetKeyValue("Host")而得到值smtp.sohu.com .

也可以自己加一Section如:

<Application.SmtpServer>

<Host>smtp.sohu.com</Host>

<RequriedAuthenticate>true</RequriedAuthenticate>

……

</Application.SmtpServer>

使用则为:Netop.Core.Configuration.AppConfiguration.Current.GetAppSettingConfiguration("Application.SmtpServer").GetKeyValue("Host")而得到值smtp.sohu.com
.

在Netop.Core中,还有一种代理配置,代理配置类只要实现Netop.Core.Configuration.IConfigurationAgent接口就可挺拔式使用。IConfigurationAgent如下:

public interface IConfigurationAgent

{

void Initialize(XmlNode xml);

AgentConfigurationInfo GetConfigurationInfo();

}

Netop.Core已经实现一个XML文件代理配置类:Netop.Core.Configuration.FileAgentConfiguration 。

对于配置信息:

<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">

<Application.ObjectLocator>

<DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>

<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>

<AspectAgentName>AppAspect</AspectAgentName>

</Application.ObjectLocator>

<Application.Log>

<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>

<LogParameter>Log</LogParameter>

</Application.Log>

<Application.Agent>

<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Service.xml</File>

</Agent>

<Agent name = "AppAspect"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Aspect.xml</File>

</Agent>

<Agent name = "AppEntity"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Entity.xml</File>

</Agent>

</Application.Agent>

</Netop.Application>

<Application.Agent>节点内的就是代理配置信息:

<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">

<File>Service.xml</File>

</Agent>

name为代理配置名,type为代理配置类,File为文件路径。

程序使用为:

object p = null;

AppConfiguration.Current.GetAgentData("AppObjectService", out p);//返回Service.xml文件的XML信息

当然代理配置名AppObjectService是跟<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>联系的,感兴趣的可以看ObjectServiceConfigurationManager的内容。

对于开发者要自己在Netop.Application加节点(不属于上面所说的类型),怎么办呢?

AppConfigurationManager有一方法:XmlNode GetData(string key) ,调用后自己解析XML信息即可(调用AppConfiguration.Current.GetData("节点名")返回XmlNode)。

这是Netop.Core的配置服务。

当然还可以直接使用NET系统的配置处理器类来处理配置信息,如:

System.Configuration.NameValueSectionHandler <!--以NameValue键值/对的形式返回配置节中的信息-->

System.Configuration.DictionarySectionHandler  <!--以Dictionary字典键值对的形式返回配置节中的信息-->

System.Configuration.SingleTagSectionHandler <!--基础结构。处理 .config 文件中由单个 XML 标记所表示的各配置节。-->

轻量级的.NET对象查找服务和AOP开发框架源码Netop.Core3.5下载地址:http://download.csdn.NET/detail/tom_cat_xie_jxdy/9837303

轻量级的.NET对象查找服务和AOP开发框架测试源码 下载地址:http://download.csdn.Net/detail/tom_cat_xie_jxdy/9837278

Netop.Core--轻量级的.NET对象查找服务和AOP开发框架文档下载地址:http://download.csdn.net/detail/tom_cat_xie_jxdy/9838212

时间: 2024-10-13 22:21:38

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(2)--配置的相关文章

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(1)-导言

Netop.Core是我程序开发积累的一个轻量级的.NET对象查找服务和AOP开发框架,现将源码公开,共享给各位NET程序员后面相关的文章对这个开发框架进行程序解说和使用解说. Netop.Core--轻量级的.NET对象查找服务和AOP开发框架概述:1.    对象查找服务(本地服务实例生成,远程服务,WCF服务)和AOP服务.2.    其它普通服务:配置, 对话上下文,日志,缓冲等.3.    类库:Netop.Core.dll  4.    必需的外部类库:Microsoft.Pract

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(4)--AOP

上节谈了谈类工厂/对象查找服务,本节谈谈AOP的实现. AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. Netop.Core的AOP采用代理的实现方式.采用代理方式,您的类就必须继承一个基类(当然不是那个默认的Object,如您的类已经有一个父类,那可以让那个类的父类去继承)-- ContextBoundObject或Netop.Core.Aspect.AspectObject.当然Net

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(3)--类工厂/对象查找服务

上节谈了谈Netop.Core的对于应用系统的配置信息的处理,对于Netop.Core最核心的服务--类工厂/对象查找服务当然要用到配置服务,等下会说到. 对于NET类工厂/对象查找服务,名气大的有Spring.Net(对应于Java的Spring--号称轻量级中间件),为什么还要再造一个轮子呢?如果说Spring是轻量级的,那Netop.Core就只 能是微量级的,够用就好,学习曲线会大幅下降,学习研究代码的时间也会大幅下降. 够用就好,何乐而不为?况且Netop.Core的类工厂/对象查找服

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(5)--其它

Netop.Core主要提供的服务是类工厂服务及AOP服务,当然还其它一些小服务: 一.对话上下文Netop.Core.Context.SessionContext       此对话上下文可用在桌面程序和ASP.NET程序,可用SetData和GetData在上下文中传递数据.方法有:       public static bool IsWeb()       public static string GetAppMapPath (string path)       public stat

Spring核心框架 - AOP的原理及源码解析

一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置AOP将基础和切面结合起来,从而完成切面对目标对象的编织实现. 层次2面向方面系统:配置模型,逻辑配置和AOP模型是为上策的语言和开发环境提供支持的,主要功能是将需要增强的目标对象.切面和配置使用AOP的API转换.抽象.封装成面向方面中的逻辑模型. 层次1底层编织实现模块:主要是将面向方面系统抽象封

leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)

前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet 的插件库,非常有用 内容概览 leaflet结合geoserver利用WFS服务实现图层删除源代码demo下载 效果图如下: 本篇主要是在上一篇leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的,leaflet通过调用geoserver发布的地图服务WFS来

openlayers6结合geoserver利用WFS服务实现图层删除功能(附源码下载)

内容概览 1.openlayers6结合geoserver利用WFS服务实现图层删除功能2.源代码demo下载 效果图如下: 本篇主要是在上一篇openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的,openlayers6通过调用geoserver发布的地图服务WFS来达到图层删除记录的目的.与GeoServer的WFS进行基于Rest交互关键就在于请求参数,值得注意的是这些请求最好采用POST方法发送.查询可以采用json,但增加,删除,修改都只能

C#版Windows服务安装卸载小工具-附源码

前言 在我们的工作中,经常遇到Windows服务的安装和卸载,在之前公司也普写过一个WinForm程序选择安装路径,这次再来个小巧灵活的控制台程序,不用再选择,只需放到需要安装服务的目录中运行就可以实现安装或卸载. 开发思路 1.由于系统的权限限制,在运行程序时需要以管理员身份运行 2.因为需要实现安装和卸载两个功能,在程序运行时提示本次操作是安装还是卸载  需要输入 1 或 2 3.接下来程序会查找当前目录中的可执行文件并过滤程序本身和有时我们复制进来的带有vhost的文件,并列出列表让操作者

做一个合格的程序猿之浅析Spring AOP源码(十八) Spring AOP开发大作战源码解析

其实上一篇文章价值很小,也有重复造轮子的嫌疑,网上AOP的实例很多,不胜枚举,其实我要说的并不是这个,我想要说的就是上一节中spring的配置文件: 我们这边并没有用到我们上几节分析的哪几个AOP的主要实现类:ProxyFactoryBean.java , ProxyFactory.java ,AspectJProxyFactory.java ,在我们这个配置文件中,根本没有显示的去配置这些类,那么spring到底是怎么做到的呢? 大家可以这么想,spring到底是怎么去杀害目标对象的呢?真正的