首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Castle.MicroKernel.ComponentNotFoundException -当单元测试

Castle.MicroKernel.ComponentNotFoundException -当单元测试
EN

Stack Overflow用户
提问于 2016-02-23 16:40:35
回答 1查看 2.2K关注 0票数 2

我在试着对一个计划员进行单元测试。

代码语言:javascript
复制
//Arrange
var containter = new WindsorContainer();
var Orch = containter.Resolve<ApiOrchestrator>();// Exception Thrown here

Orchestrator的构造器是:

代码语言:javascript
复制
public ApiOrchestrator(IApiWrap[] apiWraps)
{
    _apiWraps = apiWraps;
}

登记是

代码语言:javascript
复制
public class IocContainer : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<FrmDataEntry>().LifestyleTransient());
        container.Register(Component.For<ApiOrchestrator>().LifestyleTransient());
        container.Register(Component.For<IApiWrap>().ImplementedBy<ClassA>().LifestyleTransient());
        container.Register(Component.For<IApiWrap>().ImplementedBy<ClassB>().LifestyleTransient());
    }
}

IocContainer在正在测试的项目中,但是名称空间是引用的,我可以使用Orchestrator作为new。我希望它只给我所有已注册IApiWrap的数组。

作为卡塞尔的新手,我不明白缺少了什么。代码修复会很好,但我真的很想知道为什么容器似乎没有注册的编排器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 17:51:53

好的,少了3样东西

  1. 对Castle.Windsor.Installer的参考
  2. 从容器到安装程序的调用,以“查找”所有已注册的类。
  3. 安装程序还需要添加一个子解析器来生成类的集合,因为一个特定的集合没有注册,并且编排器需要一个IApiWrap集合。

安装程序更改

代码语言:javascript
复制
public class IocContainer : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        //New Line
        container.Kernel.Resolver.AddSubResolver(
                  new CollectionResolver(container.Kernel, true));

        container.Register(Component.For<FrmDataEntry>().LifestyleTransient());
        container.Register(Component.For<ApiOrchestrator>().LifestyleTransient());
        container.Register(Component.For<IApiWrap>().ImplementedBy<SettledCurveImportCommodityPriceWrap>().LifestyleTransient());
        container.Register(Component.For<IApiWrap>().ImplementedBy<ForwardCurveImportBalmoPriceWrap>().LifestyleTransient());
    }
}

测试/解决变化

代码语言:javascript
复制
//Arrange
        var container = new WindsorContainer();

        //New Line
        container.Install(FromAssembly.InDirectory(new AssemblyFilter("","EkaA*") ));

        var Orch = container.Resolve<ApiOrchestrator>();

现在,它可以工作了,尽管对代码所做的任何进一步解释或更正都是值得欢迎的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35583153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档