C# 依赖项注入不起作用的布局渲染器

C# 依赖项注入不起作用的布局渲染器,c#,dependency-injection,nlog,C#,Dependency Injection,Nlog,我按照本文创建了一个布局渲染器。hello world的例子可以找到,但是当我去的时候,它注入了一些东西,而不是写任何东西 我已经删除了构造函数注入,日志记录工作正常 我已经将同一项注入到控制器的构造函数中,这是可行的 nlog.config <extensions> <add assembly="NLog.Web.AspNetCore"/> <add assembly="[[ My assembly is here]]"/> </ext

我按照本文创建了一个布局渲染器。hello world的例子可以找到,但是当我去的时候,它注入了一些东西,而不是写任何东西

  • 我已经删除了构造函数注入,日志记录工作正常
  • 我已经将同一项注入到控制器的构造函数中,这是可行的
  • nlog.config

    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
        <add assembly="[[ My assembly is here]]"/>
    </extensions>
    <targets>
     <target xsi:type="File" name="ownFile-web" fileName="[[PATH]]/nlog-own-${shortdate}.log"
                    layout="${longdate}|${level:fixedLength=True:padding=5:padCharacter= :upperCase=True}|${correlation-id}|${message} ${exception:format=tostring}" />
    </targets>
    
    
    
    

    我希望相关应该通过。

    您需要覆盖NLog中的
    CreateInstance
    ,以便它可以创建
    CorrelationIdLayoutRenderer

    ConfigurationItemFactory.Default.CreateInstance=(类型)=>
    { 
    //您的自定义目标。
    if(type==typeof(CorrelationIdLayoutRenderer))
    返回新的CorrelationIdLayoutRenderer(…);//TODO获取ICorrelationContextAccessor
    其他的
    返回Activator.CreateInstance(类型);//默认值
    };
    
    更新:


    如果注册太迟,您可以按如下方式通过NLog将所有程序集的重新加载排队:

    ConfigurationItemFactory.Default = null; // (namespace NLog.Config).
    

    它将在第一次使用NLog之前重新加载

    另请参见wiki:Julian,我有点理解这一点,但是当您需要将serviceprovider作为参数注入时该怎么办。这意味着您提到的配置需要在Startup.cs的ConfigureServices方法末尾完成。但是,当我尝试这样做时,它仍然不起作用。如果注册太迟,您可以按NLog将所有程序集的重新加载排队,如下所示:
    ConfigurationItemFactory.Default=null
    (名称空间NLog.Config)。它将在首次使用NLog之前重新加载。
    ConfigurationItemFactory.Default = null; // (namespace NLog.Config).