首先,我不确定是否用好话来描述我的问题,道歉(英语不是我的母亲)。
关于将 loggers 添加到项目中。
有人问,应该有几个记录器,它们应该“动态”定义。
因此,我们最终得到具有Logger
属性的类。
所有构造函数都有一个额外的参数,即使用其他业务参数传递给构造函数的logger
实例。当我们深入到代码中时,彼此内部的类使用相同的模式来传递logger
实例。
确实有效,但我对它并不满意。 让我烦恼的是记录器不属于业务逻辑。 也许与此无关。
-
更准确地说,这就是我目前正在研究的内容:
ILogger
接口定义记录器功能(例如LogError(string msg)
)。不同的记录器将实现此接口。 ILoggable
接口。此接口具有属性public ILogger LoggerPte
我使用带有LoggerUtility
字段[ThreadStatic]
的静态类static ILogger CurrentLogger
和函数:
public static void SetLoggerReference(ILoggable loggableClass)
{
loggableClass.LoggerPte = CurrentLogger;
}
在 loggable 类之外,定义了CurrentLogger。
在 loggable 类的构造函数中,我必须调用LoggerUtility.SetLoggerReference(this);
如果发现这种方式更加优雅,虽然它可能会扭曲,但我想知道是否有可能更进一步......
我刚刚开始阅读有关自定义属性,反射和AOP的内容。有人可以告诉我如何使用像[Loggable]
这样的属性来自动使构造函数在构造函数之后调用函数SetLoggerReference(this)
,而无需在代码中明确地将其写入。
如果有可能......
答案 0 :(得分:1)
您是否听说过依赖注入设计模式?您的原始解决方案是简单的构造函数注入您的最终解决方案是Property injection,您的所有bussines对象都需要具有LoggerPte属性。请查看一些解决方案如何处理依赖注入并通过依赖注入容器构建/创建业务对象(容器将为您注入LoggerPte属性,您不需要在每个对象构造函数中调用静态方法)。我正在使用Unity Container(Microsoft解决方案),但您可以找到很多其他人。
我希望这就是你所需要的。