Re: IoC, DI, and a mess...
Daniel Pitts wrote:
Now, the real trick is... The Computer has an InterruptTable, PortTable,
and InstructionTable instance, each of which have basically a
Map<Integer, Interrupt>, Map<Integer, Port>, etc... Is there a way with
Guice to set up that mapping? There is quite a bit of complex wiring in
that part of it too.
I think you can achieve this with a binding to a custom provider of each
map type (possibly additionally annotatedWith() in a case of mapping of
the same map types). Now you'll need a Module implementation for at
least a maps mappings, for example:
binder.bind(new TypeLiteral<Map<Integer, Port>>() {})
.toProvider(new Provider<Map<Integer,Port>>() {
@Inject final Provider<Port> portProvider = null;
public Map<Integer, Port> get() {
Map<Integer, Port> map = new HashMap<Integer, Port>();
// initialize a map... e.g.
for(int i = 0; i < 10; ++i) {
map.put(i, portProvider.get());
}
return map;
}
});
// and similar for other maps...
piotr