【问题标题】:Adding aspect to an abstract method?向抽象方法添加方面?
【发布时间】:2009-09-15 09:37:21
【问题描述】:

PostSharp 给出这个错误:

PostSharp:无法应用 OnMethodInvocation 方面 (...) 与 在摘要上编织目标站点或 外部方法“...”。考虑 从这个方法中排除方面 或使用调用站点编织。

建议的呼叫站点编织对我来说不是一个合适的解决方案。有没有办法为抽象方法添加前/后处理?

【问题讨论】:

    标签: .net aop postsharp


    【解决方案1】:

    我建议你使用方面继承。方面将自动添加到所有实现抽象方法的方法中。

    有关详细信息,请参阅 MulticastAttribute.AttributeInheritance 或 MulticastAttributeUsageAttribute.Inheritance,或 official documentation

    【讨论】:

    • 看起来像我需要的,但它不能在 OnMethodInvocation 方面正常工作。有任何想法吗?顺便说一句,您的文档在 Opera 浏览器中的行为非常奇怪。
    • OnMethodInvocation 应该可以使用继承。检查 Reflector 以了解会发生什么。
    【解决方案2】:

    这当然是不可能的——你将如何使用抽象方法执行目标站点编织,一个没有任何代码的方法?您当然可以使用实现该方法的所有派生类型执行目标站点编织,但这需要您控制这些类型。或者,您可以使方法成为非抽象和虚拟方法,并要求派生类型来调用基本实现。

    【讨论】:

    • 至少有一种方法可以使它成为可能——使用“模板方法”模式。 PostSharp 已经将它用于虚拟方法。抽象方法也可以做到这一点。
    • "[...] 为抽象方法添加前/后处理的方法?"你的意思是在代码调用之前或之后执行一些步骤?您想通过方面实现什么?
    • 我只需要在指定方法组中的每个方法之前和之后执行一些代码。 PostSharp 似乎是一个很好的解决方案,但抽象方法的问题使它变得不可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2013-09-23
    • 2021-12-29
    • 2023-03-10
    • 1970-01-01
    • 2021-10-13
    • 2017-10-28
    相关资源
    最近更新 更多