# Container

The responsibility of the container is to initialize the instances and resolve their dependencies.

# Create Container

Import all providers and create vesselize container:

import { Vesselize } from 'vesselize';
import { UserService, createAdminUserService } from './services/UserService';
import { AuthService } from './services/AuthService';
import { Constants } from './config/constants';

const vesselize = new Vesselize({
  providers: [
    // class provider
    {
      token: 'UserService',
      useClass: UserService
    },

    // factory provider
    {
      token: 'AdminUserService',
      useFactory: createAdminUserService
    },

    // async factory provider
    {
      token: 'AuthService',
      useFactory: createAuthService
    },

    // value provider
    {
      token: 'AppConstant',
      useValue: Constants
    }
  ]
});

export default vesselize;

# Acquire Instance

You can get the corresponding instance through the provider name.

const userService = vesselize.get('UserService');
const adminUserService = vesselize.get('AdminUserService');
const AppConstant = vesselize.get('AppConstant');

# Acquire Async Instance

The instance promise created by the asynchronous factory can be obtained through the getAsync method.

vesselize.getAsync('AuthService').then(authService => {
  // do something with authService
});