【发布时间】:2016-11-04 16:36:30
【问题描述】:
我有一个服务在多个不同的服务器上运行,配置非常相似。我希望能够使用 Castle Windsor WCF 设施为任意端点地址生成客户端。
public class ServiceFactory {
public IService GetService(string hostName){
....
}
}
现在,我会在编译时知道我的所有服务是什么,所以我可以这样做:
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"));
然后像这样执行我的 ServiceFactory:
public class ServiceFactory
{
private readonly IWindsorContainer _container;
public ServiceFactory(IWindsorContainer container)
{
_container = container;
}
public IService GetService(string hostName)
{
return _container.Resolve<IService>(hostName);
}
}
但这对我忘记配置特定端点并不可靠。有没有更优雅的解决方案?
【问题讨论】:
标签: c# wcf castle-windsor wcffacility