2009-07-17 32 views
5

如何在結構化地圖中註冊通用接口的所有實例?如何在StructureMap中註冊通用接口

我知道如何爲沒有通用接口做到這一點:

internal class MVCDemoRegistry : Registry 
    { 
     public MVCDemoRegistry() 
     { 
      Scan(x => 
      { 
       x.Assembly("MVCDemo"); 
       x.Assembly("MVCDemo.Infrastructure"); 
       x.Assembly("MVCDemo.Services"); 

       x.AddAllTypesOf<ISupplyView>(); 
      }); 
     } 
    } 

回答

10

我會的東西去像

// in IToaster.cs 
public interface IToaster<T> {} 

// in your StructureMap registry 
Scan(x => 
{ 
    x.Assembly("MVCDemo"); 
    x.Assembly("MVCDemo.Infrastructure"); 
    x.Assembly("MVCDemo.Services"); 

    x.AddAllTypesOf(typeof(IToaster<>)) 
}); 

這裏的關鍵是,這種方法使用的非泛型重載AddAllTypesOf()。否則,這確實會變成一個粘性小部件。

請參閱本SO線程圍繞這些問題好好討論:StructureMap Auto registration for generic types using Scan

這應該做的伎倆,除非有一些關於你的方法,我很想念 - 隨時若有更新。

相關問題