@akala/core
Version:
25 lines • 979 B
JavaScript
import { defaultInjector } from './injectors/simple-injector.js';
import { ctorToFunction } from './injectors/shared.js';
/**
* Decorator factory for creating injectable factories.
* @param name - Unique identifier for the factory in the dependency injection container.
* @param toInject - Names of dependencies to inject into the factory constructor.
*/
export function factory(name, ...toInject) {
return function (target) {
let instance = null;
const ctor = ctorToFunction(target);
const factory = (...parameters) => {
if (!instance)
instance = ctor(...parameters);
return instance.build();
};
if (toInject.length === 0) {
defaultInjector.registerFactory(name, defaultInjector.inject(factory));
}
else {
defaultInjector.registerFactory(name, defaultInjector.injectWithName(toInject, factory));
}
};
}
//# sourceMappingURL=factory.js.map