2012-01-11 67 views
1

在测试中,我想添加一个注册表,然后排除我知道从注册表中扫描发现的类型。这是设置。如何从发现它的注册表扫描中排除外部类型?

ObjectFactory.Configure(x => 
{ 
    x.AddRegistry<DefaultConventionsRegistry>(); 
    x.Scan(scanner => scanner.ExcludeType<RunBanks>()); 
}); 

这里的注册表:

public class DefaultConventionsRegistry : Registry 
{ 
    public DefaultConventionsRegistry() 
    { 
     Scan(scanner => 
     { 
      scanner.Assembly(AssemblyNames.WebAssemblyName); 
      scanner.WithDefaultConventions(); 
      scanner.AddAllTypesOf<IHandles>(); 
     }); 
    } 
} 

RunBanks并不直接从IHandles继承。它继承自一个抽象基类,它继承自一个开放的通用接口,最终从IHandles继承。

我期待从容器中排除的RunBanks但如果我叫

ObjectFactory.GetAllInstances<IHandles>(); 

类型存在RunBanks的一个实例。如果我明确排除DefaultConventionsRegistry中的RunBanks类型,那么事情会按预期工作,但我不想这样做。

+0

你能否提供你的班级结构? – Rookian 2012-01-12 17:35:11

+0

@Rookian感谢您的回复!我不确定你还需要看什么。班级结构是什么意思?这里的要点是我有一个测试,配置SM添加注册表(如图所示)。它还定义了SM应该排除某种类型(RunBanks)的事实。注册表扫描所有类型的接口。该RunBanks类型(明确排除在外)继承自IHandles,但我期望在调用GetAllInstances ()时不会初始化它,但它是。如果我仍然不清楚,让我知道,当我有时间时,我会告诉你一个失败的测试。 – 2012-01-13 21:05:09

+0

在不同的程序集中有不同的实现吗? – Rookian 2012-01-14 13:12:26

回答

0

我将在稍后验证,但我有一种感觉,排除特定类型的原因不起作用是因为我没有告诉程序集在哪里扫描。稍后当我确定发现时,我会更新这个答案。

+0

看起来像没有解决它。我仍然难住在这里。 – 2012-01-13 21:48:26