/** @module refer */
import { IReferences } from './IReferences';

/**
 * Interface for components that depends on other components. 
 * 
 * If component requires explicit notification to unset references
 * it shall additionally implement [[IUnreferenceable]] interface.
 * 
 * @see [[IReferences]]
 * @see [[IUnreferenceable]]
 * @see [[Referencer]]
 * 
 * ### Example ###
 * 
 *     export class MyController implements IReferenceable {
 *         public _persistence: IMyPersistence;
 *         ...    
 *         public setReferences(references: IReferences): void {
 *             this._persistence = references.getOneRequired<IMyPersistence>(
 *                 new Descriptor("mygroup", "persistence", "*", "*", "1.0")
 *             );
 *         }
 *         ...
 *     }
 */
export interface IReferenceable {
	/**
	 * Sets references to dependent components.
	 * 
	 * @param references 	references to locate the component dependencies. 
	 * @see [[IReferences]]
	 */
	setReferences(references: IReferences): void;
}
