不可能采用常见的拦截策略。
但在编译时工作的大部分AOP框架都可以做到。 (例如:PostSharp)
我在开源NConcern AOP Framework上工作。
这是一个简单的.NET AOP框架,允许在运行时通过交换方法进行拦截。
它可以完成其工作的虚拟方法,非虚拟方法和静态方法没有任何工厂模式和继承的需要。
我的建议是避免使用AOP来“猴子补丁”,而静态方法只能是“单身使用快捷方式”,而不是主流。
在你的情况下,使用单身模式和静态方法作为shortcup和DI(依赖注入)来实现简单的代理模式比较容易。
实施例:
接口
public interface IRepository
{
IQueryable<T> Query<T>()
where T : class;
}
使用DI糖(通过工厂)
static public class Repository
{
//You can wrap the interface (proxy) here if you need...
static private readonly IRepository m_Repository = MyDIFactory.Import<IRepository>();
static public IQueryable<T> Query<T>()
where T : class
{
return Repository.m_Repository.Query<T>();
}
}
用法
Repository.Query<T>().CacheForMinutes(10);
Repository.Query<T>().LogWhenErrorOccurs();
不要。只要避免静态类。坚持通过接口抽象的实例类,你会更快乐。哦,你可以拦截那些。 – 2010-04-23 05:59:10