2013-01-09 21 views
1

我有一些功能切換,我包括在我的.NET應用程序使用StructureMap。我想要註冊該功能以達到兩個目的。的診斷頁面上所有IFeatures在StructureMap中有兩次註冊同一個對象的好方法嗎?

  • 顯示當前狀態。
  • 在依賴於給出IFeature實現服務的構造函數使用某些情況下

這裏是我的設置。我想知道的是,我做對了嗎?有沒有更好的辦法可以做到這一點?

class HotNewFeature : IFeature { ... } 

class ServiceThatUsesFeature 
{ 
    public ServiceThatUsesFeature(HotNewFeature hotNewFeature) { ... } 
} 

// Type registry setup 
For<HotNewFeature>().Singleton().Use<HotNewFeature>(); 
For<IFeature>().Singleton().Add(c => c.GetInstance<HotNewFeature>); 
For<ServiceThatUsesFeature>().Singleton().Use<ServiceThatUsesFeature>()); 

// Get all instances on the diagnostics page: 
IEnumerable<IFeature> features = ServiceLocator.Current.GetAllInstances<IFeature>(); 

我想到的是,診斷頁面上,features會在這種情況下,包含IEnumerable用一個單一的元素,的HotNewFeature實例。

+0

請詳細說明您希望返回GetAllInstances的實例。 –

回答

1

使用Scan功能來註冊實現IFeature的所有類型。這將滿足您的第一個需求,即在診斷頁面上顯示一個列表。

如果一個服務需要一個具體的實現,應該申報,而不是在構造函數接口(IFeature)它需要的特定類型(HotNewFeature)。你在你的例子中正確地做了這個。在這一點上,你不需要在StructureMap中做更多的事情。如果您從StructureMap請求ServiceThatUsersFeature,並且它依賴於具體類(HotNewFeature),那麼StructureMap將知道如何實例化該具體類。

相關問題