lazybox

Service container based on Map()

Usage no npm install needed!

<script type="module">
  import lazybox from 'https://cdn.skypack.dev/lazybox';
</script>

README

Lazybox

Dependency injection container based on Map()

Usage


var Lazybox = require('lazybox');

var c = new Lazybox();

// Set parameter
c.set('foo.bar', 'baz');

// Define a service
c.define('foo', () => {
    return new Service();
});

// Define a service with dependencies
c.define('answer', ['answer.value', (value) => {
    console.log('Lazily initialized');
    return {
        life: () => value,
        universe: () => value,
        everything: () => value
    };
}]);
c.set('answer.value', 42);

c.get('answer').life(); // Logs 'Lazily initialized'

// Define a generator service

c.define('nextid', function *nextId() {
    const id = 0;
    while (true) {
        yield id++;
    }
});
let id = c.get('nextid')
id(); // 0
id(); // 1
id(); // 2 ...


Dependency Injection

Providers

// Register a provider function
c.register((c) => {
    c.set('foo', 'bar');
});

// Register a provider object
c.register({
    register: (c) => {
        c.set('foo', 'bar');
    }
});

API

container.match(pattern, callback)

Use path-to-regexp to match keys.

This does not initialize any service by calling get()

Arguments

  • pattern: A key pattern
  • callback: A function (key, params, container) to call for each result.
cnt.matchKeys('foo.:bar.:baz?', (key, params, container) => { ... });

container.setdefault(key, value)

Similar to Python's dict.setdefault(key, value) method. It gets the value of a key or sets it to value if not defined.