C#中的方面方向

时间:2012-08-13 09:25:24

标签: c# aspect

我有一个FTPDataTransfer - 类,其状态为FTPDataTransferState。这个类提供了许多转移方法,如ReceiveData(重载),SendData,... 如何在不转换每个转移方法的值的情况下将状态更改为ReadyTransfer,...?

2 个答案:

答案 0 :(得分:1)

领先的.NET AOP工具包是PostSharp。在你的情况下它的工作方式是你定义一个自定义属性,指定在执行方法时应该设置的状态,将属性应用于适当的方法,并定义(在一个地方)代码设置/重置国家。该工具包将在输入/离开方法时运行此代码。

答案 1 :(得分:1)

您可以使用PostSharp。更详细地说,OnMethodBoundaryAspect是您要使用的方面。在你的情况下,它可能看起来像:

using PostSharp.Aspects;

[Serializable]
public sealed class ReadyOnExit : OnMethodBoundaryAspect
{
    public override void OnExit(MethodExecutionArgs args)
    {
        var state = (FTPDataTransferState)args.Instance;
        state.Transfer(FTPDataTransferState.Ready);
    }
}