C#/.NET 中常用的AOP框架——Castle

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34202873/article/details/85042009

【C#高级语法特性锦集】

https://blog.csdn.net/qq_34202873/article/details/91043366


C#中常用的AOP框架——Castle

Aspect-Oriented Programming(面向切面编程,AOP)。

它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

1. 先加载其相关依赖:

在这里插入图片描述

NuGet:Castle.Core

直接下载最新版本即可

2. 创建AOP实现类:

	public class DBInterceptor : IInterceptor
	{
		public void Intercept(IInvocation invocation)
		{
			ReadXML(invocation);//前
			invocation.Proceed();
			WriteXML(invocation);//后
		}

		private void ReadXML(IInvocation invocation)
		{
			DBContexts.DBEntitiesList = XMLDBHelper.ReadXML<List<DBEntity>>();
		}

		private void WriteXML(IInvocation invocation)
		{
			XMLDBHelper.WriteXml(DBContexts.DBEntitiesList);
		}
	}

3. 创建AOP实例化类:

	public static IDBOperation CreateDBUtilsAOP()
	{
		ProxyGenerator generator = new ProxyGenerator();
		DBInterceptor interceptor = new DBInterceptor();
		//DBUtils为需要进行AOP横向扩展的类,这里是我自己项目所用到的
		//DBUtils userprocessor = generator.CreateClassProxy<DBUtils>(interceptor);
		//IDBUtils为DBUtils的接口实现,依赖倒置原则DIP
		IDBUtils userprocessor = generator.CreateClassProxy<DBUtils>(interceptor);
		return userprocessor;
	}

4. 具体类——若类中方法需要AOP扩展,则必须加virtual:##

	public class DBUtils: IDBOperation
	{		

		public virtual void Remove(string userID)
		{
			//...
		}

		public virtual void Add(DBEntity dBEntity)
		{
			//...
		}

		public virtual void Modify(string userID,string newName)
		{
			//...
		}

	}
展开阅读全文

没有更多推荐了,返回首页