@proc7ts/context-modules v7.0.2
IoC Context Modules
Dynamically loadable IoC context modules conforming to @proc7ts/context-values API
Context module can be used to provide multiple assets for IoC context at once. Unloading the module revokes all assets provided by it.
Usage example:
import { CxModule } from '@proc7ts/context-modules';
// Construct new module.
const myModule = new CxModule('my module', {
setup(setup) {
// Provide assets for `Foo` entry.
setup.provide(cxConstAsset(Foo, 'foo'));
},
});
// Add the module to context.
const myModuleSupply = cxBuilder.provide(myModule);
// Start using the module.
// The first usage of the module loads it.
const myModuleUse = await context.get(myModule).use();
// Await for the module to load.
await myModuleUse.whenReady;
// Access the value provided by module.
console.log(context.get(Foo)); // 'foo'
// Stop using the module.
// Once tha last usage stopped, the module is unloaded.
myModuleUse.supply.off();
// Revoke the module.
myModuleSupply.off();Context module's constructor accepts a human-readable module name, and options object.
The following options supported:
needs- A module or modules the constructed one requires.The listed modules will be loaded prior to loading the constructed one.
has- A module or modules the constructed one provides.When specified, the constructed module will be loaded instead of the listed ones.
setup()- A method that sets up constructed module.May be synchronous or asynchronous.
Accepts a
CxModule.Setupinstance with the following properties:get()- For accessing context values.Inherited from
ContextValuesinterface.provide()- For providing context entry assets.The same as in
CxBuilder.All assets provided by this method will be revoked once the module unloaded.
initBy()- For registering module initializers.
To use a module:
- Create its implementation.
- Provide it by
CxBuilder.provide(module)call. - Obtain its handle from context by calling
CxValues.get(module). - Start using it by calling the
.use()method of obtained module handle. - Wait for the module to load and become ready to use:
await use.whenReady. When no longer needed, cut off the module use supply:
use.supply.off().The module will be unloaded once no longer uses remain.
Note that the module can be in use indirectly when required by another one.
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago