2011-04-28 4 views
2

Ninject에 과도 범위 클래스가 생성되는 순간에 단지 한번 적용Ninject에 과도 범위

class InjectedClass 
{ 
    [Inject] 
    public IClass Instance { get;set;} 
} 

InjectedClass 방법의 실례 특성에 대한 호출 ICLASS의 동일한 인스턴스를 참조한다. 매번 새로운 인스턴스를 반환 할 수 있습니까? IKernel에 대한 참조가 없습니다.

답변

2

이 경우 Factory 패턴이 필요합니다. 유형의 인스턴스를 주입하는 대신 팩토리 객체를 삽입 한 다음 해당 메소드를 호출합니다. 간단한 예제를 사용하려면 :

[Inject] 
public ISomeFactory SomeFactory { get; set; } 

public IClass Instance 
{ 
    get { return SomeFactory.CreateNew(); } 
} 
+0

IKernel을 참조해야한다면 공장에서 IClass 인스턴스를 어떻게 만듭니 까? –

+0

문제가 발생할 때마다 새 인스턴스를 반환하는 '마법 속성'을 복제하지 마십시오. 인스턴스를 메서드로 변경하십시오. (그리고 저는 이것을 Constructor Injection으로 변환해야한다고 생각하지만 덜 중요합니다) –

+0

맞습니다 - 저는 단지 간단한 예제를 제공했습니다. 공장 패턴이 더 중요합니다. – Tejs

2

로드에서 모듈 :

public ctor(Func<IClass> classFactory) 
{ 
    this.classFactory = classFactory; 
} 

을 그리고 이런 식으로 필요한 인스턴스를 만들 : Does Ninject support Func (auto generated factory)?

그런 다음 생성자에 공장 기능을 통과

this.classFactory(); 

참고 : 새 인스턴스를 o에 전달하는 것이 좋지 않은 것 같습니다. 귀하의 질문과 같은 속성을 사용하여 thers. 의존성이있는 클래스가 있으면이 다른 클래스에서 위에있는 메커니즘을 사용하거나 단일 인스턴스 만 필요하면 대신 생성자 주입을 사용하십시오.

+0

+1 정확하게 동일한 방식으로 대답하기 위해 '과제'를 대기 중입니다. –

관련 문제