c# - 是否可以在它实现的项目之外使用实现 Fody 编织器的属性?
问题描述
在已实现该属性的项目之外的方法上使用实现 Fody 编织器的属性时,我无法拦截方法连接点。
我已经在项目中实现了 MethodDecorator.Fody 编织器,但是当我尝试将属性添加到项目外的任何方法时,编织不会发生。它虽然在同一个项目中工作。
[AttributeUsage(AttributeTargets.Method)]
public class RelayExceptionsAttribute : Attribute, IMethodDecorator
{
public void Init(object instance, MethodBase method, object[] args)
{ }
public void OnException(Exception exception)
{
Console.WriteLine(exception.Message);
}
public void OnEntry() { }
public void OnExit() { }
}
当我在同一项目中的方法上使用此属性时,按预期命中 OnException(和属性中的其他方法)。当我将它放在项目外部的方法上(但将项目属性定义为引用)时,不会发生拦截。
解决方案
将模块应用于 MethodDecorator.Fody 实现
[module: RelayExceptions]
[AttributeUsage(AttributeTargets.Method)]
public class RelayExceptionsAttribute : Attribute, IMethodDecorator
{
public void Init(object instance, MethodBase method, object[] args)
{ }
public void OnException(Exception exception)
{
Console.WriteLine(exception.Message);
}
public void OnEntry() { }
public void OnExit() { }
}
在另一个有参考提及的项目中[模块:RelayExceptions]
[module: RelayExceptions]
class Test{
[RelayExceptions]
public void AnyMethod()
{
//some code
}
}
推荐阅读
- python - 如何根据列标签获取数据框的交集?
- cmake - 声明一个空列表,并在函数中更新它
- outlook - Office.context.mailbox.item.getEntities() 为所有实体返回 null
- jar - Vaadin Flow 14,Jetty 嵌入式和静态文件
- opencv - 使用opencv跟踪旋转物体
- c++ - 有没有类似 is_empty_but_has_virtual_functions 的东西?
- python - Python:芹菜检查
- jquery - 如何在 DJango 中停止页面重新加载 ajax jquery
- azure-devops - 是否可以自定义 Azure Pipelines Bot 在 MS Teams 中发送的消息?
- html - 固定位置 css 清除两者都不起作用