2012-12-05 3 views
6

최근에 Ninject와 Ninject.Web.Mvc를 기존 ASP.NET MVC 4 웹 응용 프로그램에 추가했습니다. 사이트를 검색 할 때 나는 겉으로는 무작위로, 다음과 같은 예외가 나타납니다임의로 발생하는 Ninject 예외 : "Ninject 구성 요소 ICache로드 오류"

[InvalidOperationException이 : 오류로드 Ninject에 구성 요소 ICACHE 없음 같은 구성 요소가 커널의 구성 요소 컨테이너에 등록되었습니다.

제안 사항 : 1) KernelBase에 대한 맞춤 하위 클래스를 만든 경우 적절하게 에서 AddComponents() 메소드를 구현했는지 확인하십시오. 2) RemoveAll()을 호출하여 컨테이너에서 구성 요소를 제거하지 않았는지 확인하십시오. 3) 실수로 커널 하나를 이상 생성하지 않았는지 확인하십시오. ]c : \ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs : 160 Ninject.Components.ComponentContainer.Get (형식 구성 요소) c : \ Ninject.Components.ComponentContainer.Get Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs : 116 Ninject.Web.Common. <> c__DisplayClass2.b__1 C에서 (IKernel 커널) : 프로젝트 \ \ Ninject에 \ Ninject.Web.Common \ SRC \ Ninject.Web.Common \ OnePerRequestHttpModule.cs : 74 Ninject.GlobalKernelRegistration.MapKernels (Action`1 동작)에서 C : \ 프로젝트 \ Ninject에 \ Ninject에 \ SRC \ Ninject에 \ GlobalKernelRegistration.cs : 75 Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest() 을 c : \ 프로젝트 \ Ninject에 \ Ninject.Web.Common \ SRC \ Ninject에 .Web.Common \ OnePerRequestHttpModule.cs : 74 Ninject.Web.Common.OnePerRequestHttpModule.b__0 (Object o, EventArgs e) c : \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs : 56 System.Web.SyncEventExecutionStep.Syst em.Web.HttpApplication.IExecutionStep.Execute() 136 (IExecutionStep 단계, 부울 & completedSynchronously) +69

내가 위의 예외를받을되면, 단순히 새로 고치거나 다시 클릭 보인다 사이트가 다시 정상적으로 작동하게하십시오. 사이트의 어떤 영역도 다른 영역보다 더 많이 발생하지 않는 것으로 보입니다.

문제는 여기에서 묻는 질문과 매우 비슷합니다. Ninject + "Error loading Ninject component ICache". 그러나이 문제는 확장 자체가 포함 된 버그로 인해 발생했으며 1 년이 넘었으며 해결 된 것으로 보입니다.

이 내용은 NinjectWebCommon.cs 파일의 수정없이 발생합니다. (모듈이로드되지 않고 바인딩이 추가되지 않았습니다.) 제가 멈출 수있는 유일한 방법은 NinjectWebCommon.cs을 모두 프로젝트에서 제외하는 것입니다.

Nuget 패키지를 설치하는 것 외에 다른 작업을 수행 했으므로 어떤 정보를 포함해야할지 모르겠습니다. 아마도 주목할 가치는이 프로젝트에는 DI 용 Ninject를 사용하는 다른 어셈블리에 대한 참조가 포함되어 있다는 것입니다.

나는 꽤 많이 둘러 보았고, 왜 이렇게 될지 상실했다. 어떤 제안이라도 대단히 감사하겠습니다.

+0

MVA 응용 프로그램에서 Ninject를 활성화하는 WebActivator 및 Global.asax.cs 기반 방법을 사용할 때 발생합니다. – UnhipGlint

답변

4

분명히 응용 프로그램 (MVC + Libs)에 관련된 여러 커널이 있습니다.응용 프로그램의 런타임 중에 커널 인스턴스를 작성하고 처리하는 것은 피해야하는 사항입니다. 애플리케이션을 시작할 때 커널을 거의 만들지 않도록 디자인을 변경하는 것이 좋습니다. 그리고 나중에 모든 라이브러리를 포함하여 아무 것도 생성되지 않습니다.

그런데이 문제가 Ninject의 최신 버전에서 어떻게 발생하는지 코드에서 알 수는 없습니다. 응용 프로그램과 모든 라이브러리가 최신 버전의 Ninject에 있는지 확인하는 것이 좋습니다.

+0

Ninject를 사용하여 라이브러리를 참조 할 필요가 없도록 코드를 약간 리팩토링하려고 할 것입니다. 그게 어떤 영향을 받았는지보고 버전 번호를 확인하겠습니다. – UnhipGlint

+0

Ninject를 사용하여 외부 어셈블리에 대한 참조를 제거한 후 문제가 사라진 것처럼 보입니다. 잘하면 그게, 당신의 도움을 주셔서 감사합니다! – UnhipGlint