2012-07-06 1 views
4

나는 그곳에있는 메소드가 true를 반환하는 한 객체가 여러 동시 웹 요청에 의해 재사용되어야하는 시나리오를 가지고있다. 해당 객체는 스레드로부터 안전합니다.Ninject를 사용하여 현재 범위에있는 객체를 사용하여 범위에 있는지 확인할 수 있습니까?

그래서 아직 범위에 있는지 판단하기 위해 현재 범위에있는 개체가 필요합니다. Ninject로 이것을 달성하는 가장 좋은 방법은 무엇입니까?

아마도이 질문에 답할 필요는 없지만 기본 인덱스가 변경되지 않은 상태에서 Lucene IndexSearcher/IndexReader를 다시 사용하는 것이 목표입니다. Reader에는 인덱스가 변경되면 false를 반환하는 IsCurrent 메서드가 있습니다.

Bind<ILuceneIndex>().ToProvider(new LuceneIndexProvider()); 

및 공급자 내부 재창조의 논리를 적용

답변

0

당신이 원하는 것을 달성하기 위해 나에게 최선을하기 위해이 공급자를 사용하는 것입니다.

+0

이것이 올바르게 이해된다면 공급자에서 작성한 코드가 현재 인스턴스를 어딘가에 유지할 책임이 있음을 의미합니까? 나는 이것을 InScope에서 어떤 식 으로든 처리하고 나머지를 Ninject가 관리 할 수 ​​있기를 바랬다. –

+0

@MichielRutting 나는 내 것이 아마 우아한 해결책이 아니라는 것을 안다. 나는 무언가를하는 것에 대해 생각했다. 그러나 재귀적인 조회를 만들기를 두려워서 붙잡 혔을 것이다. 어쨌든 시도하지 않았다. –

+0

네, 재귀 적 특성 그것은 내가 궁금해하게 만드는 것이다. 몇 가지 이상한 닭고기와 계란 문제 같아요 :) 기본적으로 공급자에 포함될 모든 논리를 작성하려고했지만 Ninject의 인프라에 뭔가 필요한 것이 있으면 궁금해했습니다. –

1

Hy, 자신 만의 범위 개체를 정의 할 수 있습니다. 범위 객체가 살아 있고 변경되지 않는 한, ninject는 바인드 된 유형의 동일한 인스턴스를 반환합니다. 사용자 지정 범위는 IsCurrent가 false를 반환하는지 확인해야합니다. https://github.com/ninject/ninject.extensions.namedscope/tree/master/src/Ninject.Extensions.NamedScope에 사용자 지정 범위를 구현하는 방법에 대해 살펴볼 수 있습니다. 자신의 스코프를 개발할 때 GC 용으로 출시되지 않을 객체를 생성하지 않도록주의해야합니다!

관련 문제