将StructureMap与派生接口一起使用

时间:2011-04-20 12:02:34

标签: c# interface structuremap instances

我有一个类似于以下内容的对象层次结构:

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 :(得分:0)

我目前的做法是使用以下内容:

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

但我不确定这是最好的解决方案