Windsor に WCF クライアントとして登録したい一連のインターフェイスがあり、それらすべてで WCF 検出を使用してエンドポイントを見つけます。私はこれと同じくらい簡単なことをしたいと思っていました:
[TestMethod]
public void TestMethod1()
{
var container = new WindsorContainer();
container.AddFacility<WcfFacility>();
container.Register(Component.For<IWcfClientModel>().ImplementedBy<WcfDiscoveryClientModel>());
// NOTE: ISampleService wasn't installed on purpose
// to force the container to generate a WCF proxy
var x = container.Resolve<ISampleService>();
Assert.IsNotNull(x);
}
WcfDiscoveryClientModel は次のように定義されています。
public class WcfDiscoveryClientModel : WcfClientModelBase
{
public WcfDiscoveryClientModel()
{
Endpoint = WcfEndpoint.Discover();
}
}
しかしもちろん、コードWcfDiscoveryClientModel
が実行されることはありません。DefaultClientModel
ファシリティ ソースを見ると、引数に何かを渡さない限り、これまでしか使用されないように見えますResolve()
。引数として何を渡すかは完全にはわかりませんが、これらのクライアントは Web アプリで使用されるため、そのルートは避けたいと思います。
だから、私の質問は: デフォルトのクライアント モデルの選択をオーバーライドする最良の方法は何ですか?