gpt4 book ai didi

c# - C# 属性可以向方法添加参数吗?

转载 作者:行者123 更新时间:2023-11-30 23:27:58 26 4
gpt4 key购买 nike

我找到了 this question - 这与我正在尝试的非常相似。但是,我的用例有点不同。

我们需要存储业务服务的审计历史记录。但是,我们需要能够在方法调用期间手动调用审计检查点,而不仅仅是之前和之后。

我们在项目中使用 CaSTLe.Core。为此,我计划创建一个名为 AuditContext 的自定义属性,用于我们的服务方法(审计业务逻辑等)。我计划使用 CaSTLe DynamicProxy 创建一个日志记录代理,它将创建一个基于属性对象中的元数据参数的新上下文对象。我想做的是将该对象作为方法参数注入(inject)到我的方法中,但不必在我们创建的每个服务方法上指定 AuditContext 参数。

本质上,不是这样的:

[AuditContext(someStaticMetadata)
public BusinessObject BusinessMethod (AuditContext context, ...arguments) {
// ...some logic...
context.checkpoint(someAuditData);
}

我希望能够做到这一点:

[AuditContext(someStaticMetadata)
public BusinessObject BusinessMethod (...arguments) { // We do not have to specify the context object for every business method...
// ...some logic...
context.checkpoint(someAuditData); // ...but the object is still available, as the parameter has been added by the argument.
}

或者,举一个更通用的例子,我想这样写:

[ProvidesParam2]
public Object myFunc (param1) { }

...并以具有此签名的函数结束:

public Object myFunc (param1, param2) { }

提炼出来的问题是 - C# 属性是否可以将参数添加到它修饰的方法中,从而在设计时有效地更改方法的签名?

谢谢!

最佳答案

简短的回答:没有。在特殊情况下(如调用约定),属性实际上会修改您可以解释为签名的内容,但它们绝对不能修改参数列表。您可以使用自定义 IL 重写器实现您想要的;类似 PostSharp 的东西可能会有所帮助(免责声明:我完全没有使用 PostSharp 的经验)。

关于c# - C# 属性可以向方法添加参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com