我有一个类似于以下内容的对象层次结构:
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从上面注入两个实例?
答案 0 :(得分:0)
我目前的做法是使用以下内容:
Forward<IVideoStreamTypeA, IVideoStream>();
Forward<IVideoStreamTypeB, IVideoStream>();
但我不确定这是最好的解决方案