2016-09-06 3 views
0

Есть ли статья или полный пример, показывающий, как вставить Log8Net-регистратор в консольное приложение с помощью ninject? До сих пор мне удалось создать новый экземпляр в основном модуле, но я не смог понять, как его вводить. Ниже приведена какая-то конфигурация.Inject Log4Net в консольное приложение с использованием Ninject

Редактировать: Думал, я добавлю причину этого делать тоже. Я хотел бы ввести регистратор в другие классы для ведения журнала.

using System; 
using System.Reflection; 
using Ninject; 
using Ninject.Modules; 

namespace SomeNameSpace 
{ 
    public class MyProgram 
    { 
     public static void Main(string[] args) 
     { 
      log4net.Config.BasicConfigurator.Configure(); 
      log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

      try 
      { 
       log.Info("Application - Start"); 

       Initialiase(); 

       _something.DoSomething(); 

       log.Info("Application - End"); 
      } 
      catch (Exception ex) 
      { 
       log.Error("Application failed", ex); 
      } 
     } 

     private static void Initialiase() 
     { 
      var kernel = new StandardKernel(); 
      kernel.Load(Assembly.GetExecutingAssembly()); 
      _something = kernel.Get<ISomething>(); 
     } 
    } 

    public class Bindings : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<ISomething>().To<Something>(); 
     } 
    } 
} 
+0

Я не могу видеть, где вы используете свой объект 'Bindings' ... это из вызова' kernel.Load() ', и если это так, на самом деле он запускает ваш метод' Load() '? – Brandon

+0

Да, Bindings.Load() переопределяет NinjectModule.Load(). Да, он запускает мой метод Bindings.Load(). –

ответ

0

Это, как я достиг этого ...

using System; 
using System.Reflection; 
using Ninject; 
using log4net; 

namespace SomeNameSpace 
{ 
    public class MyProgram 
    { 
     private static ILog _log; 

     public static void Main(string[] args) 
     { 
      try 
      { 
       Initialiase(); 

       _log.Info("Application - Start"); 

       _something.DoSomething(); 

       _log.Info("Application - End"); 
      } 
      catch (Exception ex) 
      { 
       _log.Error("Application failed", ex); 
      } 
     } 

     private static void Initialiase() 
     { 
      var kernel = new StandardKernel(); 
      kernel.Load(Assembly.GetExecutingAssembly()); 
      _log = kernel.Get<ILog>(); 
      _something = kernel.Get<ISomething>(); 
     } 
    } 

    public class Bindings : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<ILog>().ToMethod(c => LogManager.GetLogger(typeof(Program))).InSingletonScope(); 
      Bind<ISomething>().To<Something>(); 
     } 
    } 
} 

Теперь я могу DI Илог и начать регистрацию.

Однако регистратор теперь всегда имеет имя SomeNameSpace.Program. Это затруднит определение того, где журналы записываются в приложении. Самое легкое решение, которое я смог найти, это изменить конфигурацию Log4Net и использовать% C вместо% logger.

Надеюсь, это поможет.

Смежные вопросы