You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Acumatica 22R2依赖注入中非泛型ILogger失效问题咨询

解决Acumatica 22R2中非Graph对象注入非泛型ILogger的问题

方案1:注入Microsoft非泛型ILogger(推荐,适配新版本体系)

Acumatica 22R2及后续版本默认采用Microsoft.Extensions.Logging框架,针对非Graph关联对象,可通过DI容器直接注册并注入非泛型ILogger:

  1. 在DI注册代码中添加如下逻辑:
builder.Register(context =>
{
    var loggerFactory = context.Resolve<ILoggerFactory>();
    // 可指定自定义日志类别,比如业务模块名称
    return loggerFactory.CreateLogger("Default"); 
}).As<Microsoft.Extensions.Logging.ILogger>();
  1. 在非Graph类中通过构造函数注入:
public class YourNonGraphService
{
    private readonly Microsoft.Extensions.Logging.ILogger _logger;

    public YourNonGraphService(Microsoft.Extensions.Logging.ILogger logger)
    {
        _logger = logger;
    }

    public void ExecuteOperation()
    {
        _logger.LogInformation("非Graph对象日志测试:信息");
        _logger.LogError("非Graph对象日志测试:错误");
    }
}

方案2:适配Serilog ILogger(若需保留Serilog接口)

如果必须使用Serilog的ILogger接口,需确保注册的实例能正确接入Acumatica的日志输出流程。22R2中PXTrace.Logger已改为适配Microsoft日志体系的包装类,原直接注册方式失效,可通过以下方式调整:

builder.Register(context =>
{
    // 从Acumatica日志工厂获取实例并转换为Serilog ILogger
    var microsoftLogger = context.Resolve<ILoggerFactory>().CreateLogger("SerilogWrapper");
    return (Serilog.ILogger)microsoftLogger;
}).As<Serilog.ILogger>();

注意:该方式依赖Acumatica底层仍使用Serilog作为日志实现,若默认实现变更则会失败,优先推荐方案1。

核心原因说明

22R2版本中Acumatica全面切换到Microsoft.Extensions.Logging日志体系,原直接注册Serilog ILogger的方式因底层实现变更失效,必须适配新的框架逻辑才能让日志正常写入追踪系统。非Graph对象的DI注入逻辑与Graph一致,只要确保类型在容器中正确注册,即可通过构造函数获取ILogger实例。

内容的提问来源于stack exchange,提问作者Kyle Vanderstoep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:10:15