是否可以使用方面在一个方面引用类的属性?
以下示例:
public class Device
{
public bool IsRunning { get; set; }
public bool IsOffline { get; set; }
[Offline]
public void Start()
{
IsRunning = true;
}
[Offline]
public void Stop()
{
IsRunning = false;
}
}
[Serializable]
public class Offline : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
// should be something like
if (device.IsOffline)
{
args.FlowBehavior = FlowBehavior.Return;
}
}
}
如果类的IsOffline属性为true,我想拦截OnEntry。 当然有很多设备,因此在这方面注入一个设备似乎不可行。
另外,因为它是一个api我不想把它作为参数传递(someDevice.Start(someDevice.IsOffline)),我可以通过它的MethodExecutionArgs获取状态。
答案 0 :(得分:3)
'args.Instance'将为您提供已应用方面的实例。
您需要将其转换为您可以使用的内容,应用于所有类的Inteface应该足够了。
答案 1 :(得分:1)
另一种选择是" import"从目标类到方面的属性,如this documentation page所述。您需要实现IInstanceScopedAspect界面,添加一个新的公共字段来保存"导入"属性并使用ImportMemberAttribute标记该字段。
[Serializable]
public class Offline : OnMethodBoundaryAspect, IInstanceScopedAspect
{
[ImportMember("IsOffline", IsRequired = true)]
public Property<bool> IsOffline;
public override void OnEntry(MethodExecutionArgs args)
{
if (this.IsOffline.Get())
{
// ...
}
}
// IInstanceScopedAspect implementation below:
public object CreateInstance(AdviceArgs adviceArgs)
{
return this.MemberwiseClone();
}
public void RuntimeInitializeInstance()
{
}
}