, 그리고 하나는 이것이다 :Ninject WithConstructorArgument가 형식에 대한 전역 바인딩을 재정의하지 않습니까?
Bind<IHasher>().To<SHA256Hasher>();
이이 심부름 군을 사용하는 내내 몇 가지 클래스가 있기 때문에, 잘 작동합니다. 그러나 md5 해시를 예상하는 gravatar와 같은 제 3 자와의 해시를 사용하는 또 다른 유형의 해더가 필요한 컨트롤러가 하나 또는 두 개 있습니다. 그럼 저는 다음을 수행하십시오
Bind<ISomeController>().To<SomeController>().Named("SomeController").WithConstructorArgument("emailHasher", new Md5Hasher());
그럼 내 컨트롤러는 다음과 같습니다
public class SomeController : Controller
{
private IHasher emailHasher;
public CampaignController(IHasher emailHasher)
{
this.emailHasher = emailHasher;
}
}
것은 내가 IHasher이 Md5Hasher 것으로 기대 디버깅 할 때, 그러나 그것이 Sha256Hasher입니다. 그렇다면이 예상되는 동작과 오버라이드 된 형식을 사용하는 방법은 무엇입니까?
일반적으로 컨트롤은 인터페이스에 의해서가 아니라 유형에 따라 결정됩니다. 또한 이름을 등록 할 필요가 없으므로 등록 할 때 'Bind(). ToSelf(). WithConstructorArgument ("emailHasher ", 새로운 Md5Hasher()); –
nemesv
플러그인 스타일 아키텍처를 사용하고 컨트롤러가 이름으로 액세스되기 때문에이 질문의 범위를 벗어나는 이유가 있습니다. 그러나 나는 단지 그것을 넣었 으면합니다. 이 영역 주위에 주입 과정에 영향을 줄 수있는 것. 그래서 구체적인 유형과 명명 기준을 가진 인터페이스가있는 이유가 있습니다. – Grofit
'WithConstructorArgument'는 예상대로 작동해야합니다. 문제의 원인이되는 커스텀 플러그인 아키텍처에 뭔가가 있습니다. 컨트롤러 등록이 올바른 순서로 호출되지 않고 나중에'WithConstructorArgument' 등록이 일부 기본값으로 다시 정의됩니다. .. – nemesv