A binding registry to be used within a nuclear app to register resolver functions for specific keys.
npm install nuclear-binding-containerA binding registry to be used within a nuclear app to register resolver functions for specific keys.
This module is designed to be used in conjuction with other modules to compose bigger modules.
Highly inspired by the ServiceContainer from laravel/framework.
Assume that you want to bind an instance to a container and use it within other parts of a system.
We have 2 different types of bindings: shared and non-shared: shared bindings are registered to container with shared property set to true.
Even though this doesn't have any effect on anything, any other module that consumes BindingContainer module, will have access to this property.
We have 3 actions:
``js
// your/app/app.js
const reactor = new Nuclear.Reactor
const bindingContainer = BindingContainer(reactor)
// this will register the binding with shared property set to 'false'
// that can be later used to initate a Foo instance.
bindingContainer.actions.bind('Foo', false, () => new Foo)
// this will register the binding only if there is no other binding under this
// name. It is not a shared binding, so second parameter is false again. Itbind
// mirrors action's api.
bindingContainer.actions.bindIf('Foo', false, () => new Foo)
// we can register a shared binding either using bind action by passing truesingleton
// as second parameter to denote that it will be shared, or we can use
// action to achieve the same purpose.
bindingContainer.actions.bind('Foo', true, () => new Foo)
bindingContainer.actions.singleton('Foo', () => new Foo) // this is identical to the line above.
// later on we can read a binding using exported binding getter.Foo
const binding = reactor.evaluate(bindingContainer.getters.binding('Foo'))
console.log(binding.resolve()) // shows a instance.`
```
npm install nuclear-binding-container
MIT