2011-04-13 51 views
9

我有一個插件系統,允許用戶選擇他們希望創建的插件類型(基本上這爲插件實例設置了一個配置)。StructureMap獲取註冊類型,而不是實例

他們從選擇列表中選擇插件類型。我正在使用StructureMap將一個IEnumerable插入到我的MVC控制器中,以便我可以訪問FQ類型名稱以在選擇列表中使用。

這工作正常,但我不喜歡,我不得不創建一個所有註冊插件的實例,只是在選擇列表中顯示它們的列表。

所以問題是,我可以通過StructureMap訪問註冊的IPlugin類型嗎?

回答

13

您應該能夠通過使用容器模型屬性來獲取實例信息:

IContainer container = ObjectFactory.Container; 
IEnumerable<InstanceRef> instances = container.Model.AllInstances. 
    Where(i => i.PluginType.Equals(typeof(IPlugin))); 

您可以通過訪問具體類型:

foreach(var instanceRef in instances) 
    Console.WriteLine(instanceRef.ConcreteType); 
+0

這工作。謝謝。 – 2011-04-13 16:04:09

相關問題