17 lines
631 B
JavaScript
17 lines
631 B
JavaScript
|
export default function predicateAwareClassFactory(predicate, trueConstructor, falseConstructor, useCaching = true) {
|
||
|
let instance;
|
||
|
let previousPredicate;
|
||
|
return (dependencyContainer) => {
|
||
|
const currentPredicate = predicate(dependencyContainer);
|
||
|
if (!useCaching || previousPredicate !== currentPredicate) {
|
||
|
if ((previousPredicate = currentPredicate)) {
|
||
|
instance = dependencyContainer.resolve(trueConstructor);
|
||
|
}
|
||
|
else {
|
||
|
instance = dependencyContainer.resolve(falseConstructor);
|
||
|
}
|
||
|
}
|
||
|
return instance;
|
||
|
};
|
||
|
}
|