pip-services3-components-node
Version:
Component definitions for Pip.Services in Node.js
60 lines (59 loc) • 2.21 kB
TypeScript
import { IFactory } from './IFactory';
/**
* Aggregates multiple factories into a single factory component.
* When a new component is requested, it iterates through
* factories to locate the one able to create the requested component.
*
* This component is used to conveniently keep all supported factories in a single place.
*
* ### Example ###
*
* let factory = new CompositeFactory();
* factory.add(new DefaultLoggerFactory());
* factory.add(new DefaultCountersFactory());
*
* let loggerLocator = new Descriptor("*", "logger", "*", "*", "1.0");
* factory.canCreate(loggerLocator); // Result: Descriptor("pip-service", "logger", "null", "default", "1.0")
* factory.create(loggerLocator); // Result: created NullLogger
*/
export declare class CompositeFactory implements IFactory {
private _factories;
/**
* Creates a new instance of the factory.
*
* @param factories a list of factories to embed into this factory.
*/
constructor(...factories: IFactory[]);
/**
* Adds a factory into the list of embedded factories.
*
* @param factory a factory to be added.
*/
add(factory: IFactory): void;
/**
* Removes a factory from the list of embedded factories.
*
* @param factory the factory to remove.
*/
remove(factory: IFactory): void;
/**
* Checks if this factory is able to create component by given locator.
*
* This method searches for all registered components and returns
* a locator for component it is able to create that matches the given locator.
* If the factory is not able to create a requested component is returns null.
*
* @param locator a locator to identify component to be created.
* @returns a locator for a component that the factory is able to create.
*/
canCreate(locator: any): any;
/**
* Creates a component identified by given locator.
*
* @param locator a locator to identify component to be created.
* @returns the created component.
*
* @throws a CreateException if the factory is not able to create the component.
*/
create(locator: any): any;
}