我想在我的n层项目中使用自定义属性。对于
-缓存--日志记录-验证-异常
首先,您应该搜索AOP。这是的某种开发方法
面向方面编程(AOP(是一种编程范式,旨在通过允许交叉关注点的分离来提高模块性维基百科
这并不像你想象的那么简单,在C#中你必须使用一些第三方库。
我建议从Advice先生开始,这会对你有所帮助。
编写自定义属性看起来有点像这样:
using System;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method)]
public class LogAttribute : Attribute
{
public bool _loggingEnabled;
public LogAttribute(loggingEnabled)
{
_loggingEnabled = loggingEnabled;
}
}
用法示例:
[Log(true)]
public class SampleClass
{
}
如果你需要进一步澄清,如果你分享更多关于你对属性的预期使用,我可以澄清更多。例如,我不确定您是否希望您的logging属性为您提供一种显式声明该类/结构是否会被记录的方法,但这就是我决定演示的方式。此外,请注意,您可以通过属性类声明中的AttributeUsage
属性将其应用于属性和各种其他成员。我希望这能有所帮助。
更新:
保存方法示例:
[Log(true)]
public void Save(Company company)
{
_context.Save();
}
然后,您将使用静态方法Attribute.GetCustomAttribute(MemberInfo element, Type attributeType)
来检索存储在该属性中的信息。由于在这种情况下,您可能希望在许多地方使用日志记录,您可以在应用程序的其他地方编写另一个方法(很可能也是静态的(,该方法看起来像这样(有关更多信息,请参阅下面的System.Reflection参考链接(。
public static void Log(MemberInfo element)
{
LogAttribute attribute = Attribute.GetCustomAttribute(element, typeof(LogAttribute);
if (attribute._loggingEnabled)
{
// Create log file and add information from here.
}
}
属性参考
反射参考