2017-12-13 2 views
0

유니티 컨테이너를 사용하고 있습니다. 클래스를 IOC 컨테이너에 등록했습니다. Auth 클래스의 인스턴스를 만들려고 할 때 다음 예외가 발생합니다. 예외 : InvalidOperationException - 현재 유형 인 log4net.ILog가 인터페이스이므로 생성 할 수 없습니다. 형식 매핑이 누락 되었습니까?예외는 다음과 같습니다. InvalidOperationException - 현재 유형 인 log4net.ILog가 인터페이스이며 구성 할 수 없습니다. 형식 매핑이 누락 되었습니까?

내가 잘못하고 계시다면 알려주십시오.

내 코드 :

using Unity; 
    Public Main() 
    { 
    private readonly IUnityContainer container; 
    public override void Instantiate() 
    { 
     container.RegisterSingleton<IAuthentication, Auth>("Auth"); 
    } 

    public Authenticate() 
    { 
     var instance = container.Resolve<IAuthentication>("Auth");**//Getting exception here** 
    } 
    } 

인증 클래스 :

public class Auth: IAuthentication 
    { 
     private readonly ILog log; 
     private IImpID impIDobj; 
     public Auth(ILog log, IImpID impIDobj) 
     { 
      this.impIDobj= impIDobj; 
      this.log = log; 
     } 

     public Auth() 
      : this(LogManager.GetLogger("Auth"), new CAuth()) 
     { 
     } 
     public Authenticate() 
     { 
      impIDobj.Authenticate(data); 
     //Some logics 
     } 
    } 
+0

전체 예외 : 예외는 다음과 같습니다 InvalidOperationException이 - 현재 유형, log4net.ILog는 인터페이스이며, 구성 할 수 없습니다. 형식 매핑이 누락 되었습니까? 예외가 발생했을 때 컨테이너는 다음과 같습니다. Auth.IAuthentication 해결 (없음) Auth.IAuthentication, Auth 해결 ImpID.Auth, Auth 해결 매개 변수 'log'해결 중 생성자 ImID.Auth (log4net.ILog log, IImpID impIDobj) log4net.ILog, (none) –

+0

해결 추가 정보가있는 경우 질문을 편집하고 주석에 넣지 마십시오. – juharr

+1

로깅 구성 요소를 컨테이너에 어디에 등록 했습니까? – Amy

답변

0

감사합니다 당신의 모든 의견. 하지만 "InjectionConstructor"로이 문제를 해결할 수 있습니다. 더 많은 정보는 here입니다.

나의 새로운 인증 클래스 :

public class Auth: IAuthentication 
{ 
    private readonly ILog log; 
    private IImpID impIDobj; 
    public Auth(ILog log, IImpID impIDobj) 
    { 
     this.impIDobj= impIDobj; 
     this.log = log; 
    } 

    [InjectionConstructor] 
    public Auth() 
     : this(LogManager.GetLogger("Auth"), new CAuth()) 
    { 
    } 
    public Authenticate() 
    { 
     impIDobj.Authenticate(data); 
    //Some logics 
    } 
} 
1

컨테이너는 ILOG의 형태이며, 인증의 인스턴스를 생성하지 못할 알고 나던. ILog의 유형을 제공하고 Instantiate 메소드에이 행을 추가하십시오.

container.RegisterSingleton<ILog, yourOwnLogType>();

관련 문제