gpt4 book ai didi

c# - 如何在另一个项目中使用MethodDecorator.Fody Decorator

转载 作者:行者123 更新时间:2023-12-05 03:06:16 25 4
gpt4 key购买 nike

我使用的 Fody Nuget 包如下

  1. 安装包

    PM> Install-Package MethodDecorator.Fody
  2. 装饰方法

    public class BusinessLayerClass
    {
    [LogMethod]
    public string BusinessLayerMethod()
    {
    DataLayerClass dataLayerClass = new DataLayerClass();
    return dataLayerClass.DataLayerMethod();
    }
    }
  3. 编写拦截器

    using System;
    using System.Reflection;

    [module: LogMethod] // Attribute should be "registered" by adding as module or assembly custom attribute

    // Any attribute which provides OnEntry/OnExit/OnException with proper args
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Assembly | AttributeTargets.Module)]
    public class LogMethodAttribute : Attribute, IMethodDecorator
    {
    private MethodBase _method;

    // instance, method and args can be captured here and stored in attribute instance fields
    // for future usage in OnEntry/OnExit/OnException

    public void Init(object instance, MethodBase method, object[] args)
    {
    _method = method;
    }

    public void OnEntry()
    {
    NLogging.Trace("Entering into {0}", _method.Name);
    }

    public void OnExit()
    {
    NLogging.Trace("Exiting into {0}", _method.Name);
    }

    public void OnException(Exception exception)
    {
    NLogging.Trace(exception, "Exception {0}", _method.Name);
    }
    }

这在同一个项目中工作正常,但是当我在另一个项目的另一个方法中使用装饰器 [LogMethod] 时,这个 OnEntry(), OnExit(), OnException(Exception exception) 方法不会触发。

例如:

[LogMethod]
public void Another_Method_In_Seperate_Project()

我添加了对定义 [LogMethod] 的项目的引用。

任何人都可以给我一个在其他项目中使用相同实现的方法,而无需在每个项目中执行 LogMethodAttribute.cs(定义此 [LogMethod] 的地方)。

最佳答案

您还需要在其他项目中安装 MethodDecorator.Fody nuget 包(以及依赖项)。您还需要在该项目中添加另一个 FodyWeavers.xml

关于c# - 如何在另一个项目中使用MethodDecorator.Fody Decorator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648179/

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