내 응용 프로그램은 "SignalR"클라이언트/서버 통신 프레임 워크를 사용합니다. 익숙하지 않은 경우 일반적으로 서버 측 응용 프로그램에는 클라이언트가 호출 할 수있는 메서드를 제공하는 하나 이상의 "허브"클래스 (asmx 웹 서비스와 유사)가 포함되어 있습니다.성 윈저 - 이름으로 해결하는 방법?
var hubConnection = new HubConnection("http://...");
var fooHubProxy = hubConnection.CreateHubProxy("FooHub");
var barHubProxy = hubConnection.CreateHubProxy("BarHub");
...etc...
CreateHubProxy()
에 전달 된 문자열 매개 변수의 이름입니다 -이 : 시작하는 동안, 클라이언트는 먼저는, 예를 들어 얘기해야 각 허브에 대해 "프록시"를 생성, 연결을 만들어야합니다 서버 측 허브 클래스. 메서드 반환 유형은 IHubProxy
입니다.
내가 여기 윈저를 이용할 수 있어야한다고 느낀다. 그러나 나는 해결책을 찾기 위해 고심하고있다. 내 첫 번째 생각은 허브 프록시를 인스턴스화하고 이러한 인스턴스를 Windsor (이름으로)에 등록하는 것이 었습니다.
var fooHubProxy = hubConnection.CreateHubProxy("FooHub");
container.Register(Component.For<IHubProxy>().Instance(fooHubProxy).LifestyleSingleton().Named("FooHub"));
...etc...
문제는 클래스가 허브 프록시를 필요로 할 때 이름은 사용하지 않는 것이 좋습니다 서비스 로케이터 패턴을 사용하는 것입니다으로, 유일한 방법은 그것을 해결하는 것입니다. 다른 Windsor 기능 (예 : 입력 된 공장 등)이 여기에서 유용 할 수 있습니까?
편집
난 그냥 윈저의 .UsingFactoryMethod
발견했습니다, 이것은 작동 할 허브 등록 단순화하는 경우 궁금 :
container.Register(Component.For<IHubProxy>()
.UsingFactoryMethod((kernel, context) => hubConnection.CreateHubProxy("FooHub"))
.LifestyleSingleton()
.Named("FooHub"));
나는 아직도 해결하는 방법의 문제가 생각을 그래도 이름으로.