次の方法でCastleWindsorを使用してインターフェイスの複数のインスタンスを登録しました。
ServiceLocatorHelper.Register(
Component.For<ISerializerAdapter>()
.ImplementedBy<SerializerAdapter>(),
Component.For<IDriver>()
.ImplementedBy<FileDriver>()
.Named(SerializationType.Binary.ToString()),
Component.For<IDriver>()
.ImplementedBy<XmlDriver>()
.Named(SerializationType.Xml.ToString()),
Component.For<IBroker>().ImplementedBy<Broker>()
);
依存関係は次のようになります。
+ IBroker
- IDriver
types
{
- FileDriver
- XmlDriver
}
- ISerializerAdapter
したがって、新しいオブジェクトを作成するためのデフォルトのコンストラクターの順序は次のとおりです。
IBroker broker = new Broker(new IDriver(new ISerializerAdapter));
問題は 、次のように城を使用して新しいIDriverを解決する場合です。
IBroker broker = container.Resolve<IBroker>();
IDriver driver = broker.Driver;
Assert.IsTrue(driver.GetType() == typeof(FileDriver));
プロパティIDriverは常にFileDriverタイプですが、キーを使用してIDriverを解決すると、適切なものが返されます。
IDriver fileDriver = container.Resolve<IDriver>(SerializationType.Binary.ToString());
Assert.IsTrue(fileDriver.GetType() == typeof(FileDriver));
IDriver fileDriver = container.Resolve<IDriver>(SerializationType.Xml.ToString());
Assert.IsTrue(fileDriver.GetType() == typeof(XmlDriver));
どうすればこのようなことを言うことができますか?
IBroker broker = container.Resolve<IBroker>("Xml");
Assert.IsTrue(broker.Driver.GetType() == typeof(XmlDriver));