2016-11-02 2 views
3

aps.net 코어 지원에 NLog와 NLog.Extensions.Logging을 사용하고 있습니다. 사용자 지정 대상을 만들고 대상 생성자에 서비스를 주입해야합니다.
다음 코드가 실행되지 없구요 :.net 코어가있는 NLog에 주입 된 서비스가있는 사용자 정의 타겟

public MyTarget(IService service) {....} 

을 최대한 빨리 IService PARAM을 분리 할 때, 모든 것이 작동합니다.

맞춤형 타겟에 서비스를 삽입하려면 어떻게해야합니까?

답변

3

올바른 방법과 올바른 방법이 무엇인지 아직 확실하지 않습니다. 이제 다음과 같은 방법으로 구현 (안 좋은 솔루션,하지만 적어도 작동)의 경우 :

public void ConfigureServices(IServiceCollection services) 
{ 
    ...... 
    services.AddScoped<MyCustomNlogTarget>(); 
} 

public void Configure(IApplicationBuilder app, 
        IHostingEnvironment env, 
        ILoggerFactory loggerFactory, 
        IServiceProvider provider) 
{ 
    var nlogProvider = ConfigurationItemFactory.Default.CreateInstance; 
    ConfigurationItemFactory.Default.CreateInstance = type => 
    { 
     try 
     { 
      return nlogProvider(type); 
     } 
     catch (Exception) 
     { 
     } 

     return provider.GetService(type); 
    }; 

    loggerFactory.AddNLog(); 
    env.ConfigureNLog("NLog.config"); 
    ....... 
} 
그것은 상자 NLog 제공자 중 (기본 목표 및 레이아웃 렌더링을위한)를 사용하여 객체를 확인하려고

, 경우 그것은 (내 목표를 IService로 해결하려고 할 때) 실패하고, asp.net 코어 DI를 사용하여 해결됩니다.

관련 문제