2011-04-20 43 views
0

我有類似如下的對象層次:與導出接口使用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) { } 
} 

隨着當前註冊表的代碼中,「流」參數空。如何讓StructureMap注入上面的兩個實例?

回答

0

我目前的做法是使用以下命令:

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

但我不知道這是最好的解決辦法

+0

我認爲這是唯一的解決方案。 – Euphoric 2011-04-20 13:36:51