我使用 Fody Nuget 包如下
安装包
PM> Install-Package MethodDecorator.Fody装饰方法
public class BusinessLayerClass { [LogMethod] public string BusinessLayerMethod() { DataLayerClass dataLayerClass = new DataLayerClass(); return dataLayerClass.DataLayerMethod(); } }编写拦截器
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] 时, this OnEntry(), OnExit(),OnException(Exception exception)方法不会触发。
例如:
[LogMethod]
public void Another_Method_In_Seperate_Project()
我添加了对定义 [LogMethod] 的项目的引用。
谁能给我一个在其他项目中使用相同实现的方法,而无需在每个项目中执行 LogMethodAttribute.cs(定义此 [LogMethod])。