【发布时间】:2016-05-30 10:11:34
【问题描述】:
这是我的扩展 IMethodDecorator 接口的属性类的代码
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Field)]
public class LogAttribute : Attribute, IMethodDecorator
{
ILogger log = Logger.Factory.GetLogger<Logger>();
String methodName;
public LogAttribute() {
}
public void Init(object instance, MethodBase method, object[] args)
{
methodName = method.Name;
}
public void OnEntry()
{
Console.WriteLine(methodName);
log.Debug(methodName);
}
public void OnExit()
{
Console.WriteLine("Exiting Method");
}
public void OnException(Exception exception)
{
Console.WriteLine("Exception was thrown");
}
}
我希望能够将其用作
[log("some logmessage")]
void method()
{
// some code
}
有什么想法吗?我正在使用 Method Decorator Fody 包。
【问题讨论】:
-
.NET 中的属性允许参数构造函数;你试过
public LogAttribute(string logMessage) { }吗? -
MethodDecorator Fody 不适用于参数化构造函数。
-
@VasudhaGupta 是的。您需要提供一个重载的构造函数 - 一个不接受模块属性的参数,另一个带有您希望在装饰方法时传递的参数。