Использование StructureMap с производными интерфейсами - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть иерархия объектов, подобная следующей:

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» пуст. Как мне получить StructureMap для добавления двух экземпляров сверху?

1 Ответ

0 голосов
/ 20 апреля 2011

Мой текущий подход заключается в использовании следующего:

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

Но я не уверен, что это лучшее решение

...