次のようなオブジェクト階層があります。
interface IVideoStream { }
abstract class VideoStream : IVideoStream { }
interface IVideoStreamTypeA : IVideoStream { /* Specific for type A */ }
interface IVideoStreamTypeB : IVideoStream { /* Specific for type B */ }
class VideoStreamTypeA : IVideoStreamTypeA { }
class VideoStreamTypeB : IVideoStreamTypeB { }
一部のリソースをラップするため、VideoStreamTypeA と VideoStreamTypeB の両方の単一のインスタンスが存在する必要があります。IVideoStreamTypeA または IVideoStreamTypeB を直接使用するクラスもあれば、IVideoStream のリストを受け取るクラスもあります。
登録コードは次のようになります。
class MyRegistry: Registry
{
public MyRegistry()
{
For<IVideoStreamTypeA>().Use<VideoStreamTypeA>()
.Ctor<>() // Specific initialization
For<IVideoStreamTypeB>().Use<VideoStreamTypeB>()
.Ctor<>() // Specific initialization
For<IVideoStreamTypeA>().Singleton();
For<IVideoStreamTypeB>().Singleton();
}
}
最後に、IVideoStream のリストを受け取るクラスがいくつかあります。
class MyClass
{
public MyClass(IEnumerable<IVideoStream> streams) { }
}
現在のレジストリ コードでは、"streams" パラメータは空です。上記の 2 つのインスタンスを挿入するために StructureMap を取得するにはどうすればよいですか?