dependency-injection - 如何使用依赖注入(inject)从 postsharp 方面解决日志依赖关系

标签 dependency-injection unity-container nlog postsharp

所以我正在使用 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/

相关文章:

C# IUnityContainer 解析方法

asp.net - Unity 注入(inject)到 ASP.NET Web API Controller 和过滤器中

.net - 为什么 NLog.LogManager.Configuration 返回 null?

c# - MassTransit 6.0 中的 NLog 与 Autofac?

.net - MEF 和 Unity 之间以及用途有何不同?

spring - 如何使用 Spring 将依赖项注入(inject) HttpSessionListener?

c# - 温莎城堡 : How do I inject all implementations of interface into a ctor?

java - 在库中使用依赖注入(inject)

c# - Unity 容器和对 dotnet Core/netstandard 的支持

logging - 如何使用 Simple Injector 配置 NLog 生活方式?