미안 일부 구글 - ING 일을 시도하고 그래서 여기에 어떤 일치를 발견 간다하지 않은 전에이는 방지 중복 등록 - 성 윈저
나는 성 윈저 컨테이너를 가지고 .... 요구되고있는 경우 나는container.Register(AllTypes.FromAssemblyNamed("App.Infrastructure")
.Where(x => !x.IsAbstract && !x.IsInterface)
.WithService.DefaultInterface()
이 그러나 나는 그에서 종속성을 해결하기 위해 같은 방식으로 다른 DLL을 등록하고자, 좋은 작품 ... (컨테이너 IWindsorContainer
의 인스턴스) 다음과 같은 방법을 사용하여 내 구성 요소를 추가 할 수 있습니다. ..
이제 동일한 인터페이스 해상도가 추가되면 윈저에 알림을 보낼 수 있습니다. 즉, 인터페이스 당 하나의 구현 자만 있습니다 (둘 이상 존재하는 경우 첫 번째 가져옴).
희망은 나 자신을 충분히 설명했다. Castle Windsor 버전을 사용하고 있습니다 : 2.5.1.0 및 업그레이드/버전 변경은 실제로 옵션이 아닙니다.
업데이트 :
나는 그들이 등록 된 후 중복 등록을 제거하여이 문제를 해결했습니다. 등록하면 예외를 던질 등록을 조정할 수있는 경우
var registeredServices = new Dictionary<Type, string>();
foreach (var node in container.Kernel.GraphNodes)
{
var cmp = ((Castle.Core.ComponentModel)node);
Type t = cmp.Service;
if (registeredServices.ContainsKey(t))
container.Kernel.RemoveComponent(cmp.Name);
else
registeredServices.Add(t, cmp.Implementation.FullName);
}
첫 번째 등록이 해결되는 기본 동작이어야합니다. – maxlego
안녕하세요 @maxlego. 나는 네가 의미하는 바를 이해하지 못한다. 너는 네가 의미하는 바를 정교하게 제발 할 수 있겠 니? –
같은 인터페이스로 여러 구성 요소를 등록하는 경우 이 인터페이스로 해결하면 먼저 등록 된 구성 요소를 얻게됩니다. 나는 이것이 당신이 원하는 것임을 이해합니다. 그렇지 않습니까? – maxlego