2016-10-17 2 views
1

나는 다음과 같은 클래스가 : 기본 경우,해결 NLog 인스턴스

IUnityContainer container = new UnityContainer(); 
    container.RegisterType<TestInjection>(); 

    var myTestClass = container.Resolve<TestInjection>(new ResolverOverride[] { new ParameterOverride("logger", LogManager.GetCurrentClassLogger()) }); 
    myTestClass.Process(); 

어떻게 단결 컨테이너와 LogManager.GetCurrentClassLogger()를 해결하려면

public class TestInjection 
    { 

     private ILogger logger; 
     public TestInjection(ILogger logger) 
     { 
      this.logger = logger; 
     } 

     public void Process() 
     { 
      try 
      { 
       int zero = 0; 
       int result = 5/zero; 
      } 
      catch (DivideByZeroException ex) 
      { 
       logger.Log(LogLevel.Error, "test message", ex); 
       Console.WriteLine("logged message from class"); 
      } 
     } 
    } 

과의

Program.cs 나는 코드가 내를 Logger 클래스의 생성자에 액세스 할 수 없습니까?

감사합니다.

추신 : 이것은 DI와 Unity에 대한 나의 첫 경험입니다. 여기

답변

1

내가했던 방법입니다

  IUnityContainer container = new UnityContainer(); 
      container.RegisterType<ILogger>(new InjectionFactory(l => LogManager.GetCurrentClassLogger())); 
      container.RegisterType<TestInjection>(); 

      var myTestClass = container.Resolve<TestInjection>(new ResolverOverride[] { new ParameterOverride("logger", container.Resolve<ILogger>()) }); 
      myTestClass.Process();