Getting Started with crate-js

This page will help you get started with crate-js. You'll be up and running in a jiffy!

Introduction

Crate is an Dependency Injection library, that is loosely inspired by Symfony's Dependency Injection Component.

To get started, install crate via NPM;

npm install --save crate-js

Crate gets transpiled with Babel, so, as far as I know, it works in most node versions.

Simple Example

You can get started with a dead simple example below:

var ContainerBuilder = require('crate-js').ContainerBuilder,
    fooService = require('./fooService'),
    barService = require('./barService'),
    bazService = require('./bazService'),
    EventEmitter = require('events').EventEmitter,
    container = ContainerBuilder.buildFromJson({
        parameters: {
            someParameterName: "foo",
            bar:  						 "baz" // Comments are allowed!
        },
      	services: {
            dispatcher: {module: EventEmitter},
            foo: {module: fooService, args: ['@dispatcher']},
            bar: {module: barService, args: ['@foo', '%someParameterName%']},
            baz: {module: bazService, args: ['%bar%']}
        }
    });

container.get('dispatcher').emit('some-event');
container.getParameter('someParameterName') // === 'foo'

Loader Example

You can also use a JSON file loader, to load multiple js/json configs in.

// services.js


module.exports = {
    services: {
        dispatcher: {module: require('events').EventEmitter}
    }
}
// parameters.js

module.exports = {
    parameters: {
        someParameter: 'someParameter'
    }
}
var ContainerBuilder = require('crate-js').ContainerBuilder,
    JsonLoader = require('crate-js').JsonLoader,
    loader = new JsonLoader();

loader.addFile(require('./parameters'));
loader.addFile(require('./services'));
containerBuilder.addLoader(loader);
container = ContainerBuilder.build();

container.get('dispatcher').emit('some-event');
container.getParameter('someParameter') // === 'someParameter'