Castle Windsor: How do I inject all implementations of interface into a ctor?

前端 未结 4 2204
臣服心动
臣服心动 2020-12-28 14:59

I\'ve written an interface which is implemented by multiple classes. I want to write a Service class which will have all the registered implementations injected into its cto

4条回答
  •  -上瘾入骨i
    2020-12-28 15:12

    The answers here are all correct but I just wanted to add a little extra wrinkle to it: You have to add the sub-resolver BEFORE you register your components.

    This will work:

    container = new WindsorContainer();
    container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
    container.Register(
        Component.For().ImplementedBy(),
        Component.For().ImplementedBy(),
        Component.For().ImplementedBy()
    );
    

    This will NOT work

    container = new WindsorContainer();
    container.Register(
        Component.For().ImplementedBy(),
        Component.For().ImplementedBy(),
        Component.For().ImplementedBy()
    );
    container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
    

提交回复
热议问题