2010-03-26 3 views
1

NInject를 사용하여 여러 생성자가있는 클래스를 확인해도 작동하지 않는 것 같습니다. 다음여러 생성자가있는 클래스 삽입

public class Class1 : IClass 
{ 
public Class1(int param) {...} 
public Class1(int param2, string param3) { .. } 
} 

이 작동하지 않는 것 :

IClass1 instance = 
    IocContainer.Get<IClass>(With.Parameters.ConstructorArgument(“param”, 1)); 

모듈의 후크가 간단하고, 나는 여분의 생성자에 추가하기 전에 일했다. 바인딩을()에();

+3

오버로드 된 생성자가있는 DI는 사용하지 마십시오. 불필요한 모호성을 초래합니다. http://stackoverflow.com/questions/2470102/how-does-unity-resolve-know-which-constructor-to-use/2470404#2470404 –

답변

5

수동으로 제공되는 .ctor 인수가 .ctor 선택 프로세스에서 고려되지 않기 때문에 작동하지 않는 이유가 있습니다. 의사는 매개 변수 유형에 바인딩이있는 매개 변수의 수에 따라 점수가 매겨집니다. 활성화 중에 수동으로 제공된 .ctor 인수가 적용됩니다. int 또는 string에 대한 바인딩이 없으므로 점수가 매겨지지 않습니다. 사용하려는 .ctor에 [Inject] 속성을 추가하여 채점을 강요 할 수 있습니다.

4

문제는 Ninject가 사용할 수있는 바인딩 된 매개 변수 수에 따라 .ctors를 선택한다는 것입니다. 즉, Ninject는 근본적으로 오버로드를 이해하지 못합니다.

바인딩에서 .ToConstructor() 함수를 사용하고 .Named() 함수와 결합하여이 문제를 해결할 수 있습니다. 이를 통해 같은 클래스의 여러 바인딩을 다른 이름을 가진 다른 생성자에 만들 수 있습니다. 그것은 약간의 kludgy이지만 작동합니다.

내 자신의 소프트웨어 개발 블로그를 유지하므로이 게시물에 대한 게시물이 나왔습니다. 몇 가지 예제 코드와 약간의 설명이 필요하면 그것을 확인해야합니다.

http://www.nephandus.com/2013/05/10/overloading-ninject/

관련 문제