0

this 문서를 사용하여 asp.net 웹 API ninject 함께 종속성 해결 프로그램을 만들었고 제대로 작동합니다. 하지만 두 가지 질문이 있습니다.asp.net 웹 api 종속성 해결 프로그램 ninject 함께 : BeginScope

  1. BeginScope 방법에는 무엇이 필요합니까? asp.net mvc dependency resolver에는이 방법이 없으며 잘 작동합니다.
  2. kernel.BeginBlock() 메서드의 용도는 무엇입니까? 나는 그것을 사용한 적이 없다.

답변

2

일반적으로 Ninject는 생성 된 개체의 처리를 처리하지 않으며 대신 개체가 범위를 벗어날 때 가비지 수집기에서 처리합니다. 가비지 컬렉터가 처분 할 때의 문제는 그것이 비 결정적이라는 것이고 언제 일어날 지 모른다는 것입니다! 이것은 데이터베이스 연결과 같은 부족한 자원에 좋지 않을 수 있습니다.

BeginScope 및 Kernel.BeginBlock의 개념은 C# 언어의 using() 블록과 매우 비슷합니다. 이것은 scope 블록의 끝에서 Ninject에 의해 생성 된 모든 객체를 강제로 정리합니다. 이러한 객체의 폐기는 결정 론적 일 것이고 모든 객체는 가능한 한 짧게 살게 될 것입니다.

Ninject.MVC5 Nuget 패키지를 사용하는 경우 ASP.NET MVC와 관련하여 요청 끝에 요청 범위에있는 모든 Ninject 생성 유형을 삭제하는 HTTP 모듈을 등록합니다. 결과적으로 컨트롤러 내부에 스코프 블록을 생성하고 관리 할 필요가 없습니다.

ASP.NET WebAPI 용 Ninject 패키지는 동일한 방식으로 작동하지만 미안하지만 사용 경험이 없다고 생각합니다.

이전에 이러한 문제를 고려했으며 대안으로 관리하려는 일회용 유형을 만드는 공장을 컨트롤러에 주입하는 방법이 있습니다. 그런 다음 컨트롤러에서 리소스를 직접 구성하고 정상적인 using() 블록을 사용하여 수명을 제어하십시오.

관련 문제