0

次のようなオブジェクト階層があります。

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 を取得するにはどうすればよいですか?

4

1 に答える 1

0

私の現在のアプローチは、以下を使用することです。

Forward<IVideoStreamTypeA, IVideoStream>();
Forward<IVideoStreamTypeB, IVideoStream>();

しかし、それが最善の解決策であるかどうかはわかりません

于 2011-04-20T12:56:57.407 に答える