【更多C#高级语法特性锦集】 点击跳转
📣读完这篇文章里你能收获到
- AOP概念介绍
- 结合具体代码讲解.NET项目接入Castle
- 这篇文章强烈建议收藏!!!免得下次找不到
一、概念篇
1 Aspect-Oriented Programming(面向切面编程,AOP)
它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
二、.Net项目接入Castle
1 加载其相关依赖
- 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)
{
//...
}
}