난 asp.net MVC 2와 Ninject 2를 사용하고있다.Ninject giving NullReferenceException
설치가 매우 간단하다. 컨트롤러는 저장소를 호출하는 서비스를 호출합니다.
제 컨트롤러에서 inject를 사용하여 문제없이 서비스 클래스를 인스턴스화합니다. 하지만 서비스 클래스는 리포지토리를 인스턴스화하지 않아 NullReferenceException을 제공합니다.
public class BaseController : Controller
{
[Inject]
public IRoundService roundService { get; set; }
}
이것은 작동합니다. 그러나 이것은 내가 내 RoundService 클래스의 roundRepository를 사용하려고하면
public class BaseService
{
[Inject]
public IRoundRepository roundRepository { get; set; }
}
은, NullReferenceException이주기 ...하지 않습니다.
IList<Round> rounds = roundRepository.GetRounds();
모듈 클래스 ... 공용 클래스 ServiceModule : NinjectModule { 공공 재정의 무효로드() { 바인딩() .TO() .InRequestScope(); } }
protected override IKernel CreateKernel()
{
return new StandardKernel(new ServiceModule(),
new RepositoryModule() );
}
기본 클래스가 아닌 기본 서비스 클래스에 생성자 삽입을 넣으면 효과가 있습니다. 기본 클래스에있는 매개 변수가있는 생성자가 기본 매개 변수가없는 매개 변수가없는 호출 된 적이 없기 때문입니다. 저는이 모든 IOC/DI에 익숙하지 않지만 새로운 방식으로 사물에 대해 생각하게합니다. – Iceman
기본 클래스에 종속성이있는 경우 매개 변수가없는 생성자가 없기 때문에 다시 종속성을 숨길 수 있습니다. 오히려 파생 클래스가 올바른 생성자를 호출하도록하십시오. 예를 들어 답을 편집하겠습니다. – Charlino