Ich habe einen Dienst auf mehreren verschiedenen Servern mit sehr ähnlichen Konfigurationen ausgeführt. Ich möchte in der Lage sein, Castle Windsor WCF Facility zu verwenden, um einen Client für beliebige Endpunktadressen zu generieren.Windsor WCF Client für mehrere Endpunkte
public class ServiceFactory {
public IService GetService(string hostName){
....
}
}
Jetzt werde ich bei der Kompilierung wissen, was all meine Dienste sein werden, so kann ich dies tun:
var container = new WindsorContainer();
// ...
container.AddFacility<WcfFacility>(f => f.CloseTimeout = TimeSpan.Zero);
container.Register(Component.For<IService>().AsWcfClient(new DefaultClientModel()
{
Endpoint = WcfEndpoint.BoundTo(new NetTcpBinding()).At("net.tcp://hostname:port")
}).Named("hostname"));
Und dann so meinen Servicefactory tun:
public class ServiceFactory
{
private readonly IWindsorContainer _container;
public ServiceFactory(IWindsorContainer container)
{
_container = container;
}
public IService GetService(string hostName)
{
return _container.Resolve<IService>(hostName);
}
}
Aber das ist nicht robust gegen mich zu vergessen, einen bestimmten Endpunkt zu konfigurieren. Gibt es eine elegantere Lösung?