Использование StructureMap с производными интерфейсами

#c# #interface #structuremap #instances

#c# #интерфейс #structuremap #экземпляры

Вопрос:

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

 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:

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

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

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

Комментарии:

1. Я думаю, что это единственное решение.