我的應用程序使用「SignalR」客戶端/服務器通信框架。如果您不熟悉它,服務器端應用程序通常包含一個或多個「集線器」類(類似於asmx Web服務),每個類提供可由客戶端調用的方法。在啓動過程中,客戶端需要先建立一個連接,然後創建每個輪轂,這將需要傾訴,例如「代理」: -溫莎城堡 - 如何解決名稱?
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...
的問題是,當一個類需要一箇中心代理,只有這樣,才能解決它的名字是使用服務定位器模式,這是不推薦使用。溫莎的其他功能(例如打字工廠等)在這裏可能有用嗎?
編輯
我只是發現溫莎.UsingFactoryMethod
,並且想知道這是否會工作,以簡化集線器註冊:
container.Register(Component.For<IHubProxy>()
.UsingFactoryMethod((kernel, context) => hubConnection.CreateHubProxy("FooHub"))
.LifestyleSingleton()
.Named("FooHub"));
我想我仍然對如何解決問題儘管如此。