#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. Я думаю, что это единственное решение.