所以我正在使用 NLog 和 Postsharp 组合一个项目。我有一个 OnMethodBoundaryAspect 属性后代来装饰类并提供拦截的日志记录执行。我的 DI 容器是 Unity。
那么,单独使用 DI(而不是 ServiceLocator),我将如何解析方面类中的 Log 对象以提供日志记录?过去我曾使用 ServiceLocator 来解析日志对象,但我试图摆脱这种情况,因为我真的开始相信 ServiceLocator 确实是一种反模式(是的,我知道有一点神圣在这个问题上的 war )。
谢谢!
最佳答案
在类 Aspect 中添加静态属性记录器
public class LogAspect : OnMethodBoundaryAspect
{
/// <summary>
/// Gets or sets the logger.
/// </summary>
public static ILogger logger { get; set; }
使用 ILogger 类在应用程序 init 方法中设置记录器变量,并在初始化之前使用 AttributeExclude 排除所有方法。
[LogAspect(AttributeExclude = true)]
protected void Application_Start()
{
_windsorContainer = new WindsorContainer();
ApplicationDependencyInstaller.RegisterLoggingFacility(_windsorContainer);
LogAspect.logger = _windsorContainer.Resolve<ILogger>();
关于dependency-injection - 如何使用依赖注入(inject)从 postsharp 方面解决日志依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612175/