2016-11-02 5 views
3

私はNLog.Extensions.LoggingでNLogを使用しており、aps.netコアサポートに使用しています。私はカスタムターゲットを作成し、ターゲットのコンストラクタにサービスを注入する必要があります。
次のコードが実行されることは決してありません:.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を使用して解決されます。

関連する問題