Reputation: 640
I have a class which takes an list argument in its contructor:
public class A{
private List<B> bs;
public A(List<B> bs) {
this.bs= bs;
}
}
And I am adding this class in the container as follows:
A a = someObject.createData();
pico.addComponent(a);
But I am getting an exception:
org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: A has unsatisfied dependency 'java.util.List<B>' for constructor 'public A(java.util.List)' from org.picocontainer.DefaultPicoContainer@5b970f7:6<|
Does anyone know why this is happening?
Composition Code:
MutablePicoContainer pico = new DefaultPicoContainer();
SomeClass sc= new SomeClass();
A a = sc.createbData();
pico.addComponent(sc);
pico.addComponent("bs", a.getB());
pico.addComponent("a", A.class);
Upvotes: 1
Views: 488
Reputation: 1745
This error means that you don't have class 'B' registered in container. There should be something like:
B b = new B();
pico.addComponent(b);
'B' can be an interface too, and Picocontainer supports injection of arrays with dependencies, so this will work:
public interface B {}
public class B1 implements B {}
public class B2 implements B {}
public class Test {
private List<B> stores;
public Test(List<B> stores) {
this.stores=stores;
}
}
pico.addComponent("b1",B1.class);
pico.addComponent("b2",B2.class);
pico.addComponent("test",Test.class);
Check also an official test case: https://github.com/picocontainer/picocontainer/blob/0f8172b7b12483920d0e3e2fcadb793d7ead4432/script/script-core/src/test/com/picocontainer/script/xml/XMLContainerBuilderTestCase.java#L868
Upvotes: 2