0

아래는 부모 & 하위 클래스입니다. 내가 & 그들을 사용하려고 보호 등의 상위 클래스의 속성을 한 경우상속 체인을 이해하려고 시도 중

public class ParentController : ApiController 
{ 
    public ICustomer customer { get; set;} 
    public ICustUtil util { get; set;} 

} 


public class ChildController : ParentController 
{ 
    //no issue here 
    public string Get() 
    { 
     customer = util.GetCustomers(); 
    } 

} 

, 나는 나는 그것이 public-protected 액세스 지정을 갱신 차이를 만들 않는 방법을 이해하려고 Object NULL reference Exception

public class ParentController : ApiController 
{ 
    protected ICustomer customer { get; set;} 
    protected ICustUtil util { get; set;} 

} 


public class ChildController : ParentController 
{ 
    //Object Null reference exception at run time here 
    public string Get(){ 
    customer = util.GetCustomers();} 

} 

를 얻을.

주의 사항 : - 나는

지금 명명 규칙을 무시하십시오 Castle Windsor DI 컨테이너를 사용하고

  • .

+0

@ Kgn-web : 아니오,이 코드는 실제로 컴파일되지 않습니다. 'public class ParentController : ApiController'와 같은 것이 필요합니다. 그렇다면 클래스 선언에 직접적으로 선언이 없으므로'ChildController' 코드도 컴파일되지 않습니다. [mcve]를 입력하십시오. (또한 .NET 명명 규칙에 대해 자세히 알기를 강력히 권합니다.) –

+0

@JonSkeet, 오타를 잘못 입력했습니다. 나는 진심으로 사과한다. –

+0

컴파일러 오류에 대한 예외가 아닌 이유는 아마도'ChildController' 클래스 내에서'utils' 속성을 인스턴스화하지 않는다는 것입니다. – HimBromBeere

답변

2

저는 AutoFac과 같은 IoC 컨테이너를 통해 이러한 클래스의 인스턴스를 생성하고 있으며 setter injection을 사용하고 있다고 생각합니다. 그렇지 않으면 util을 초기화하지 않으므로 첫 번째 예제가 어떻게 작동하는지 알 수 없습니다.

회원이 보호되어있는 경우 IoC 컨테이너에서 초기화 할 수 없습니다. 공용 멤버 만 클래스 외부의 코드에서 액세스 할 수 있습니다.

+0

예. 정확하다고 생각했습니다. Castle Windsor DI 컨테이너를 사용하고 있습니다 (참고 - 내 게시물에 언급되어 있습니다) –

+0

게시 해 주셔서 진심으로 감사드립니다. 나는 이것을 모르고 있었다. :) –