从codeproject里发现了一个非常不错的.net动态代理类库,有一个很好的特点是不仅支持接口代理,还支持非接口代理,关键是开源的。而castle是否开源就不太清楚了。
以下是我在事务处理中的应用。
类似的,可以实现AOP缓存一类的应用,这里不多述
以下是我在事务处理中的应用。
public class DbTransactionProxy : IInterceptor
{
Object target = null;
private DbTransactionProxy(Object target)
{
this.target = target;
}
public static T NewInstance<T>(Object target)
{
return new ProxyFactory().CreateProxy<T>(new DbTransactionProxy(target));
}
#region IInterceptor 成员
object IInterceptor.Intercept(InvocationInfo info)
{
Object[] attrs = info.TargetMethod.GetCustomAttributes(typeof(TransactionAttribute), true);
object ret = null;
if (attrs != null && attrs.Length > 0)
{
TransactionAttribute trans = (TransactionAttribute)attrs[0];
if (trans.IsTransaction)
{
//开始事务处理
try
{
SessinoUtil.BeginTransaction(trans.ConnectionString);
ret = info.TargetMethod.Invoke(target, info.Arguments);
SessinoUtil.CommitTransaction(trans.ConnectionString);
}
catch(Exception ex)
{
SessinoUtil.RollbackTransaction(trans.ConnectionString);
}
}
}
else
{
ret = info.TargetMethod.Invoke(target, info.Arguments);
}
return ret;
}
#endregion
}
类似的,可以实现AOP缓存一类的应用,这里不多述