2013-06-25 57 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