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
ABasicApplicationorAOAuth2Application) - Connectors you've created (extending
AConnector) - Batch nodes (extending
ABatchNode) - Custom nodes (extending
ACommonNode)
Pattern:
- Create SDK container
- Initialize your applications and connectors
- Register them in the container
- Start the SDK
Key Methods for Developers #
setApplication() #
public setApplication(service: IApplication): IApplication
Registers an application in the container.
Parameters:
| Parameter | Type | Description |
|---|---|---|
service | IApplication | Application 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:
| Parameter | Type | Description |
|---|---|---|
service | ICommonNode | Connector 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:
| Parameter | Type | Description |
|---|---|---|
node | T extends INode | Node instance to register |
application | IApplication | null | Optional 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:
- AConnector - Create connectors
- ABasicApplication - Create basic auth applications
- AOAuth2Application - Create OAuth2 applications
- SDK Initialization - See
orchesty-nodejs-sdk/lib/index.tsfor complete setup
See Also #
- DIContainer Source
- Initialization Example - Complete SDK setup
- Test Setup - Test container setup
- IApplication - Application interface
- INode - Node interface