Ninject에 과도 범위 클래스가 생성되는 순간에 단지 한번 적용Ninject에 과도 범위
가class InjectedClass
{
[Inject]
public IClass Instance { get;set;}
}
InjectedClass 방법의 실례 특성에 대한 호출 ICLASS의 동일한 인스턴스를 참조한다. 매번 새로운 인스턴스를 반환 할 수 있습니까? IKernel에 대한 참조가 없습니다.
Ninject에 과도 범위 클래스가 생성되는 순간에 단지 한번 적용Ninject에 과도 범위
가class InjectedClass
{
[Inject]
public IClass Instance { get;set;}
}
InjectedClass 방법의 실례 특성에 대한 호출 ICLASS의 동일한 인스턴스를 참조한다. 매번 새로운 인스턴스를 반환 할 수 있습니까? IKernel에 대한 참조가 없습니다.
이 경우 Factory 패턴이 필요합니다. 유형의 인스턴스를 주입하는 대신 팩토리 객체를 삽입 한 다음 해당 메소드를 호출합니다. 간단한 예제를 사용하려면 :
[Inject]
public ISomeFactory SomeFactory { get; set; }
public IClass Instance
{
get { return SomeFactory.CreateNew(); }
}
로드에서 모듈 :
public ctor(Func<IClass> classFactory)
{
this.classFactory = classFactory;
}
을 그리고 이런 식으로 필요한 인스턴스를 만들 : Does Ninject support Func (auto generated factory)?
그런 다음 생성자에 공장 기능을 통과
this.classFactory();
참고 : 새 인스턴스를 o에 전달하는 것이 좋지 않은 것 같습니다. 귀하의 질문과 같은 속성을 사용하여 thers. 의존성이있는 클래스가 있으면이 다른 클래스에서 위에있는 메커니즘을 사용하거나 단일 인스턴스 만 필요하면 대신 생성자 주입을 사용하십시오.
+1 정확하게 동일한 방식으로 대답하기 위해 '과제'를 대기 중입니다. –
IKernel을 참조해야한다면 공장에서 IClass 인스턴스를 어떻게 만듭니 까? –
문제가 발생할 때마다 새 인스턴스를 반환하는 '마법 속성'을 복제하지 마십시오. 인스턴스를 메서드로 변경하십시오. (그리고 저는 이것을 Constructor Injection으로 변환해야한다고 생각하지만 덜 중요합니다) –
맞습니다 - 저는 단지 간단한 예제를 제공했습니다. 공장 패턴이 더 중요합니다. – Tejs