.dll内にいくつかのWCFサービスを持つプロジェクトがあります。プロジェクトはCastle Windsorを使用しています。 SecurityServiceBehaviorには、WCFサービスで使用するIServiceBehaviorも実装されています。 SecurityServiceBehaviorコンストラクタには、引数として渡されたISecuritySettingsProviderが必要です。CastleWindsorを使用してIServiceBehaviorの異なる設定を登録します。
public class Service1Factory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var host = base.CreateServiceHost(serviceType, baseAddresses);
ISettingsProvider settingsProvider = new Service1SettingsProvider();
host.Description.Behaviors.Add(new SecurityServiceBehavior(settingsProvider));
return host;
}
}
public class Service2Factory : ServiceHostFactory
{
//the same but uses Service2SettingsProvider instead of Service1SettingsProvider
その後、私は.SVCファイルで、このファクトリを使用することができます:それはウィンザーなし仕組み 。
Container.AddFacility<WcfFacility>();
Container.RegisterTransient<IServiceBehavior, SecurityServiceBehavior>();
Container.Register(Component.For<IService1>().
ImplementedBy<Service1>().LifeStyle.PerWcfSession());
Container.Register(Component.For<IService2>().
ImplementedBy<Service2>().LifeStyle.PerWcfSession());
//Need somehow fix this lines:
Container.Register(Component.For<ISecuritySettingsProvider>()
.ImplementedBy<Service1SettingsProvider>().LifestyleSingleton());
Container.Register(Component.For<ISecuritySettingsProvider>()
.ImplementedBy<Service2SettingsProvider>().LifestyleSingleton());
をしかし、それは私がサービス2のためのサービス1とService2SettingsProviderためSecurityServiceBehavior Service1SettingsProviderを必要とcosを必要とするように動作しません。今、私はこの使用してウィンザーを登録していますか。 これを行う最善の方法は何ですか?
各サービスに異なるパラメータ名を付けて、[この質問で説明した手法の1つを使用して](http://stackoverflow.com/questions/9339840/register-component-based-on-parameter-name- on-requestor-in-windsor) – stuartd
これを行う方法を説明できませんか?たとえば、Service1のコンストラクタにパラメータを渡すことはできますが、私はそれがどのように役立つかはわかりません –
パラメータ**の名前に基づいて別のサービスを定義することができるので** service1は 'ISettingsProvider service1settingsProvider'とservice2 ISettingsProvider service2settingsProvider'をパラメータとしてとります。 – stuartd