Skip to content

burkhartt/autonode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Autonode

Disclaimer

This library is no longer being maintained. It is based upon the library continuation-local-storage, which does not work with promises. So I can't recommend using this anymore :(


Dependency injection for NodeJS inspired by Autofac (C# DI library)

Getting Started

Installation

npm install auto-node

Setup

let autonode = require('auto-node');

let app = express();
app.use(autonode.Middleware);

app.use((req, res, next) => {
  let containerBuilder = new autonode.ContainerBuilder();
  containerBuilder.registerType('UserRepository', UserRepository, autonode.LifetimeScope.InstancePerRequest);
  autonode.Container.load(containerBuilder);
}

Basic Usage

let container = require('auto-node').Container;

class UserRepository {
  constructor() {
    this.logger = container.resolve('logger');
  }
}

API

Registration

containerBuilder.register(key, instanceFunction, lifetimeScope);
containerBuilder.registerType(key, classType, lifetimeScope);

Lifetime Scopes

autonode.LifetimeScope.InstancePerRequest
autonode.LifetimeScope.SingleInstance
autonode.LifetimeScope.None

Examples

Instance referencing another registration

containerBuilder.register('lineItemRepository', () => new LineItemRepository(), autonode.LifetimeScope.InstancePerRequest);
containerBuilder.register('tripRepository', (c) => new TripRepository(c.resolve('lineItemRepository'), autonode.LifetimeScope.InstancePerRequest);

Automatic constructor injection

containerBuilder.registerType('lineItemRepository', LineItemRepository, autonode.LifetimeScope.InstancePerRequest);
conatienrBuilder.registerType('tripRepository', TripRepository, autonode.LifetimeScope.InstancePerRequest);

class TripRepository {
  constructor(lineItemRepository) { // parameter name must match registration key
    this.lineItemRepository = lineItemRepository;
  }
}

class LineItemRepository {
  constructor() { }
}

Access request from anywhere without passing it to every function

containerBuilder.register('request', () => req);
containerBuilder.register('requestAwareTripRepository', (c) => new TripRepository(c.resolve('request')));

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published