DIContainer

Overview #

DIContainer (Dependency Injection Container) is where you register your applications and connectors to make them available in the Orchesty platform. Think of it as the registry that tells the SDK about your custom code.

Purpose:

  • Register applications (API integrations)
  • Register connectors (data processors)
  • Register custom nodes
  • Manage service dependencies

Location: orchesty-nodejs-sdk/lib/DIContainer/Container.ts

When to Use #

You use DIContainer during SDK initialization to register:

  • Applications you've created (extending ABasicApplication or AOAuth2Application)
  • Connectors you've created (extending AConnector)
  • Batch nodes (extending ABatchNode)
  • Custom nodes (extending ACommonNode)

Pattern:

  1. Create SDK container
  2. Initialize your applications and connectors
  3. Register them in the container
  4. Start the SDK

Key Methods for Developers #

setApplication() #

public setApplication(service: IApplication): IApplication

Registers an application in the container.

Parameters:

ParameterTypeDescription
serviceIApplicationApplication instance to register

Returns: IApplication - The registered application

Example:

const hubspotApp = new HubspotApplication();
container.setApplication(hubspotApp);

setConnector() #

public setConnector(service: ICommonNode): ICommonNode

Registers a connector in the container.

Parameters:

ParameterTypeDescription
serviceICommonNodeConnector instance to register

Returns: ICommonNode - The registered connector

Example:

const getContactConnector = new HubspotGetContactConnector();
container.setConnector(getContactConnector);

setNode() #

public setNode<T extends INode>(node: T, application: IApplication | null = null): INode

Registers a node (connector or batch) with optional application binding.

Parameters:

ParameterTypeDescription
nodeT extends INodeNode instance to register
applicationIApplication | nullOptional application to bind to node

Returns: INode - The registered node

Example:

const connector = new MyConnector();
const app = new MyApplication();
container.setNode(connector, app);

Usage Examples #

Basic Registration #

From: orchesty-nodejs-sdk/test/TestAbstact.ts

import DIContainer from './DIContainer/Container';
import MyApplication from './applications/MyApplication';
import MyConnector from './connectors/MyConnector';

// Create container
const container = new DIContainer();

// Create and register application
const myApp = new MyApplication();
container.setApplication(myApp);

// Create and register connector
const myConnector = new MyConnector();
container.setConnector(myConnector);

Multiple Applications #

import { OAuth2Provider } from './Authorization/Provider/OAuth2/OAuth2Provider';

const container = new DIContainer();

// Register OAuth2 provider (needed for OAuth2 apps)
const oauth2Provider = new OAuth2Provider(orchestyOptions.backend);
container.set(oauth2Provider);

// Register multiple applications
const hubspotApp = new HubspotApplication();
const salesforceApp = new SalesforceApplication(oauth2Provider);
const slackApp = new SlackApplication();

container.setApplication(hubspotApp);
container.setApplication(salesforceApp);
container.setApplication(slackApp);

Multiple Connectors #

From: orchesty-nodejs-sdk/test/TestAbstact.ts

// Register multiple connectors
const getContactConnector = new HubspotGetContactConnector();
const createContactConnector = new HubspotCreateContactConnector();
const updateContactConnector = new HubspotUpdateContactConnector();

container.setConnector(getContactConnector);
container.setConnector(createContactConnector);
container.setConnector(updateContactConnector);

Binding Connector to Application #

const hubspotApp = new HubspotApplication();
const hubspotConnector = new HubspotGetContactConnector();

// Register application first
container.setApplication(hubspotApp);

// Register connector with application binding
container.setNode(hubspotConnector, hubspotApp);

// Now connector can access the application via this.getApplication()

Complete Setup Example #

From: orchesty-nodejs-sdk/lib/index.ts and test/TestAbstact.ts

import express from 'express';
import DIContainer from './DIContainer/Container';
import { ApplicationRouter } from './Application/ApplicationRouter';
import ApplicationLoader from './Application/ApplicationLoader';
import ApplicationManager from './Application/Manager/ApplicationManager';
import { OAuth2Provider } from './Authorization/Provider/OAuth2/OAuth2Provider';
import CurlSender from './Transport/Curl/CurlSender';
import Metrics from './Metrics/Metrics';

// Import your custom classes
import HubspotApplication from './applications/HubspotApplication';
import HubspotGetContactConnector from './connectors/HubspotGetContactConnector';
import HubspotCreateContactConnector from './connectors/HubspotCreateContactConnector';

// Create Express app and container
const expressApp: express.Application = express();
const container = new DIContainer();

function initiateContainer(): void {
    // 1. Set up core services
    const metrics = new Metrics();
    const curlSender = new CurlSender(metrics);
    const oauth2Provider = new OAuth2Provider(orchestyOptions.backend);
    const appLoader = new ApplicationLoader(container);
    
    container.set(metrics);
    container.set(curlSender);
    container.set(oauth2Provider);
    container.set(appLoader);
    
    // 2. Register your applications
    const hubspotApp = new HubspotApplication();
    const salesforceApp = new SalesforceApplication(oauth2Provider);
    
    container.setApplication(hubspotApp);
    container.setApplication(salesforceApp);
    
    // 3. Register your connectors
    const getContactConnector = new HubspotGetContactConnector();
    const createContactConnector = new HubspotCreateContactConnector();
    
    container.setConnector(getContactConnector);
    container.setConnector(createContactConnector);
    
    // 4. Bind connectors to their applications (optional but recommended)
    container.setNode(getContactConnector, hubspotApp);
    container.setNode(createContactConnector, hubspotApp);
    
    // 5. Set up routers
    const appManager = new ApplicationManager(appLoader, appRepo, webhookManager);
    routes.push(new ApplicationRouter(expressApp, appManager));
}

// Initialize and start
initiateContainer();
listen();

Registration Pattern #

// 1. Create container
const container = new DIContainer();

// 2. Initialize core SDK services (metrics, database, etc.)
const metrics = new Metrics();
const curlSender = new CurlSender(metrics);
container.set(metrics);
container.set(curlSender);

// 3. Register applications
container.setApplication(new MyApp1());
container.setApplication(new MyApp2());

// 4. Register connectors
container.setConnector(new MyConnector1());
container.setConnector(new MyConnector2());

// 5. SDK is ready to use

Common Patterns #

Pattern 1: Organized Registration #

function registerApplications(container: DIContainer): void {
    // CRM Applications
    container.setApplication(new HubspotApplication());
    container.setApplication(new SalesforceApplication(oauth2Provider));
    
    // Communication Applications
    container.setApplication(new SlackApplication());
    container.setApplication(new MailchimpApplication());
}

function registerConnectors(container: DIContainer): void {
    // HubSpot connectors
    container.setConnector(new HubspotGetContactConnector());
    container.setConnector(new HubspotCreateContactConnector());
    
    // Salesforce connectors
    container.setConnector(new SalesforceGetLeadConnector());
    container.setConnector(new SalesforceCreateLeadConnector());
}

// Usage
registerApplications(container);
registerConnectors(container);

Pattern 2: Dynamic Registration #

const applicationClasses = [
    HubspotApplication,
    SalesforceApplication,
    SlackApplication
];

const connectorClasses = [
    HubspotGetContactConnector,
    HubspotCreateContactConnector,
    SalesforceGetLeadConnector
];

// Register all applications
applicationClasses.forEach(AppClass => {
    const instance = new AppClass();
    container.setApplication(instance);
});

// Register all connectors
connectorClasses.forEach(ConnectorClass => {
    const instance = new ConnectorClass();
    container.setConnector(instance);
});

Next Steps #

Now that your classes are registered:

  1. AConnector - Create connectors
  2. ABasicApplication - Create basic auth applications
  3. AOAuth2Application - Create OAuth2 applications
  4. SDK Initialization - See orchesty-nodejs-sdk/lib/index.ts for complete setup

See Also #

© 2025 Orchesty Solutions. All rights reserved.