我有一些接口(interface),还有一个实现此接口(interface)的类,例如:
interface IMyInterface
{
void Func1();
void Func2();
}
class Concrete : IMyInterface
{
public virtual void Func1() { //do something }
public virtual void Func2() { //do something }
}
现在,我想创建一个类,该类用一些特定的逻辑装饰每个具体的类方法,并在调用之前和之后在非生产环境中执行。
class Decorator : Concrete
{
public override void Func1() { Pre(); base.Func1; Post(); }
public override void Func2() { Pre(); base.Func2; Post(); }
}
我的问题是,除了在界面上使用反射并创建带有CS扩展名的文本文件之外,还有没有更简单的方法来自动生成此类?
最佳答案
我个人只是在需要的地方显式地记录日志,但是如果您设置使用装饰器来执行此操作,则可以使用RealProxy class。
它可能看起来像这样:
public class DecoratorProxy<T> : RealProxy
{
private T m_instance;
public static T CreateDecorator<T>(T instance)
{
var proxy = new DecoratorProxy<T>(instance);
(T)proxy.GetTransparentProxy();
}
private DecoratorProxy(T instance) : base(typeof(T))
{
m_instance = instance;
}
public override IMessage Invoke(IMessage msg)
{
IMethodCallMessage methodMessage = msg as IMethodCallMessage;
if (methodMessage != null)
{
// log method information
//call method
methodMessage.MethodBase.Invoke(m_instance, methodMessage.Args);
return new ReturnMessage(retval, etc,etc);
}
}
}
关于c# - 如何在C#中自动生成Decorator模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4385651/