node package manager
It’s your turn. Help us improve JavaScript. Take the 2017 JavaScript Ecosystem Survey »



Build Status Dependency Status devDependency Status

Dependency Injection Container for Google Closure Library

  • concise api (resolve A as B with C by D)
  • automatic types registration
  • resolving based on strong types parsed from annotations
  • run-time configuration
  • advanced mode compilation friendly

Getting Started

This plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-closure-dicontainer --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:


The "closure_dicontainer" task


In your project's Gruntfile, add a section named closure_dicontainer to the data object passed into grunt.initConfig().

  closure_dicontainer: {
    app: {
      options: {
        // Name for generated DI container class. 
        // goog.require('app.DiContainer'); 
        name: 'app.DiContainer',
        // What should be resolved. 
        // new app.DiContainer().resolveApp() 
        resolve: ['App'],
        // Prefix for deps.js. 
        prefix: '../../../../'
      files: {
        'client/app/build/dicontainer.js': 'client/deps.js'


Type: String Default value: 'app.DiContainer'

Generated DI container name.


Type: Array.<string> Default value: ['App']

Array of types to be resolved.


Type: String Default value: '../../../../'

Prefix for deps.js processing.

Usage Example

How to use DI container in your app with various resolving configurations.

  @fileoverview App main method.
goog.provide 'app.main'
goog.require 'app.DiContainer'
app.main = ->
  container = new app.DiContainer
    resolve: App
    with: element: document.body
    resolve: foo.ui.Lightbox
    by: (lightbox) ->
    resolve: foo.IFoo
    by: ->
      new foo.Foo
  app = container.resolveApp()
goog.exportSymbol 'app.main'app.main

Add grunt-closure-dicontainer task after deps.js generation task.

Container Configuration

There is a pattern: Resolve A as B with C by D.

A is type to be resolved. B is optional type to be returned. C is optional object for run-time configuration, where key is argument name and value is runtime value. D is optional factory method.

Available in Este soon. Stay tuned.

More About DI

Release History

  • 2014-01-01   v0.4.0   Add interface resolving.
  • 2013-12-22   v0.3.0   Add resolving rules and
  • 2013-12-17   v0.2.2   Work in progress, not yet officially released. (Pre-release announcement)