使用StructureMap扫描

时间:2013-06-25 14:02:23

标签: c# 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
}

此扫描和会议代码有何作用?

2 个答案:

答案 0 :(得分:2)

Foo的接口通常名为IFoo。因此,惯例是在类名称前加上I

代码示例中的约定是对于给定的类Foo,其接口将被命名为IFooData

StructureMap将使用此约定来尝试查找所有类型的接口关系。因此,当类构造函数请求IFooData StructureMap时,将能够提供Foo的实例。

答案 1 :(得分:1)

如果有任何类“XXX”使用以“I”开头的接口“IXXX”,那么结构图将扫描“xxxx”类的所有程序集并自动实例化。有关结构图如何工作的详细信息,请参见how structure map works