我有一些接口(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/

10-11 00:00