2011-08-15 2 views
0

내가 .NET 3.5 Autofac 2.5.2.830와 아주 이상한 문제가 널 주입 IConfigService. 이 인터페이스의 구체적인 구현 자의 인스턴스가 그들에게 주입되지만 클래스에서는 null이 주입된다.
어떤 식 으로든 Heisenbug처럼 보입니다. 중단 점을 사용하여 멀리 갈 수 있기 때문입니다. 그러나 심지어 이것은 비 결정적입니다. 때때로 버그가 사라집니다. 보통 클래스에 중단 점을 설정하면 null이 주입되고, 때로는 null이 중단 점에도 주입됩니다. 앞서 생성 된 클래스 중 하나에 중단 점을 설정하고 IConfigService에 종속성을 설정하면 null 대신 값을 주입하여 문제가되는 클래스에 넣습니다. 빌더에서 완전히 관련없는 등록을 제거해도 버그가 한 번 사라졌습니다.
그러나 한 가지는 항상 일정한 것 같습니다. 항상 null을받는 클래스와 같습니다.Autofac는

어디에서이 문제를 해결할 수 있는지 알 수 없습니다. 이것과 같은 것이 알려진 것입니까? null 주사의 이유는 무엇입니까? 실행하면

public EmailNotifier(IConfigurationService configService) 
{ 
    _mailServerAddress = _configService.Get(Resources.MailServerAddress, 
              Resources.DefaultSenderAddress); 
    _configService = configService; 
} 

, 이것은 생성자의 첫 번째 줄에 나에게 NullReferenceException을했다 :

UPDATE
오,이

생성자는 다음과 같습니다 ... 바보 _configServicenull입니다. 마치 중단 점을 설정할 때 configServicenull인지 여부와 때로는 _configService이 null인지 여부를 확인하는 경우가 있습니다. 이 때문에 때로는 마치 null이 주입되거나 때로는 보이지 않는 것처럼 보입니다.

요약이 Autofac 문제가 아닙니다
, null가 주입되지 않았다 때문이다. configService에는 항상 값이 있습니다.

+0

"null을받는 동일한 클래스"에 대한 코드를 게시 할 수 있습니까? 특히 생성자 (들). 생성자에 중단 점을 넣으면 null이 확실히 표시되는지 확인할 수 있습니까? 나중에 일부를 덮어 쓸 수있는 것은 아닙니다. 내 생각에 어딘가에서 뭔가 잘못되어 가고있는 것 같습니다. – Stuart

+0

@ 스튜어트 : 귀하의 의견을 보내 주셔서 감사합니다. 그것은 내가 ctor를 벗겨서, 그래서 그것을 hier로 복사 할 수 있었고이 방법으로 오류를 발견했습니다. 업데이트를 참조하십시오 ...--) –

+0

Nah - 답변으로 올려 봅시다 :) (나는 여러 번이 작업을 수행했습니다 ...일반적으로 그것은 멤버 변수를 가로 질러 참조를 복사하지 않았기 때문에) 그리고 나는 다른 사람들이 같은 문제를 인터넷 검색을 통해 올 것이라는 평등 한 기회가 있다고 확신한다. : 그것은 "너무 어리석은"것이 아니다. – Stuart

답변

1

"null을받는 동일한 클래스"에 대한 코드를 게시 할 수 있습니까? 특히 생성자

생성자에 중단 점을 넣으면 null이 확실히 표시되는지 확인할 수 있습니까? 나중에 다른 곳으로 덮어 쓸 수있는 것은 아닙니다.

은 어딘가에서 뭔가 잘못되었다고 생각합니다.