resolvers add a level of indirection that allows you to
intercept the lookup of factories and values
in containers.

... in a structured fashion

container ={

factoryResolvers:[

function(container, name, inner){

var factory = inner();

if(factory){

return factory;

}

if name is '

}

]

};

resolvers must be pure (deterministic) functions: given the same inputs they must return the same outputs.
they must not depend on uncontrollably changing factors like randomness or time or external services

there are
but the same is true for value resolvers -
just replace FACTORY with VALUE in your mind.

a factory resolver is just a function that takes a container and a
name and returns a factory or null.

by default hinoki uses the hinoki.defaultFactoryResolver that simply
looks up the name in the containers factories property.

by adding `

those take an additional third argument

has a single factoryResolver that resolves factories in the factories object.
you can manipulate the resolvers:

container.factoryResolvers.push(myFactoryResolver);

resolvers can be used to

resolvers can be used to generate factories and values on the fly.
they can return factories without them being in container.factories.
a resolver could respond to getUserWhereId with a function