2013-06-25 79 views
0

我正在處理的項目使用StructureMap。我們有一個使用類似這樣的代碼段:使用StructureMap掃描

Scan(x => 
{ 
    try 
    { 
     x.Convention<SqlTypesConvention>(); 
     x.Assembly("ASSEMBLY NAME HERE"); 
    } 
    catch 
    { 
    } 
}); 

internal class SqlTypesConvention : IRegistrationConvention 
{ 
    #region IRegistrationConvention Members 

    public void Process(Type type, Registry registry) 
    { 
     string interfaceName = "I" + type.Name + "Data"; 
     Type interfaceType = type.GetInterface(interfaceName); 

     if (type.IsAbstract || !type.IsClass || interfaceType.IsNullRef()) 
     { 
      return; 
     } 
     registry.AddType(interfaceType, type); 
    } 

    #endregion IRegistrationConvention Members 
} 

這個掃描和約定代碼是幹什麼的?

+0

http://bit.ly/12gNn5v –

+0

@AhmedKRAIEM LOL ..我已經閱讀官方網站上的StructureMap文檔,但仍然無法理解公約事情。這就是爲什麼我在這裏發佈這個問題,希望有人會用簡單的話來解釋這個問題。 – NoobDeveloper

回答

2

通常,類Foo的接口名爲IFoo。因此,約定是在類名前綴I

您的代碼示例中的約定是給定類Foo它的接口將被命名爲IFooData

StructureMap將使用這種約定,試圖找到所有類型的接口關係。所以,當一個類構造函數要求一個IFooData時,StructureMap將能夠提供一個Foo的實例。

1

如果存在任何使用以「I」開頭的接口「IXXX」的類「XXX」,那麼結構圖將掃描所有「xxxx」類的程序集並自動實例化。有關結構圖如何工作的詳細信息可用@how structure map works