New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sack

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sack

Inversion-of-control container for all your dependency injection needs.

  • 1.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
15
decreased by-44.44%
Maintainers
1
Weekly downloads
 
Created
Source

Sack

Build Status NPM version

Inversion-of-control container for all your dependency injection needs.

browser support

Installation

Sack is meant to be used with Browserify, so install with npm:

npm install sack

Rationale

This is a simple Inversion of Control Container. It provides the mechanism you need to have a centralized store of object instances that other types can passive request get injected.

This means that you can have objects use, access, or compose other objects without having to explicitly know how to create / setup / initialize them.

It lets you have a highly-decoupled and framework-independent domain objects.

Usage

The functionality of Sack lies within its Container class.

Registering Objects

Register a dependency with a container with a stringly-typed tag and either a constructor, instance, or closure.

var Container = require('sack').Container;

var container = new Container();

// Create a new instance every request:
container.register('service', MyService);

// Create a new instance on first request, then reuse (singleton-esque):
container.shared('service', MyService);

// Use an existing instance:
container.register('service', new Service());

// Have a (lazily evaluated) callback provide the dependency every request
container.register('service', function() {
  return new MyService();
});

// Use a callback to provide the dependency, but only once (singleton):
container.shared('service', function() {
  return new MyService();
});

Resolving Objects

You can create / request objects via the make() function.

var service = container.make('service');

Expressing Dependencies

Whenever Sack creates an object, it satisfies that object's dependencies by resolving them out of the container as well.

An object expresses its dependency as a constructor parameter, whose name must match a registered object.

function UserEditController(users)
{
  this.users = users;
}

UserEditController.prototype.refreshUsers()
{
  this.users.refresh();
}

Assuming we have registered some implementation for users:

container.register('users', new LocalStorageUsers());

Then making UserEditController via the container will resolve the dependency automatically.

var controller = container.make(UserEditController);

Tern Support

The source files are all decorated with JSDoc3-style annotations that work great with the Tern code inference system. Combined with the Node plugin (see this project's .tern-project file), you can have intelligent autocomplete for methods in this library.

Testing

Testing is done with Tape and can be run with the command npm test.

Automated CI cross-browser testing is provided by Testling.

License

Copyright 2014 Brandon Valosek

Sack is released under the MIT license.

Keywords

FAQs

Package last updated on 19 Jan 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc