dioma
Version:
Elegant dependency injection container for vanilla JavaScript and TypeScript
40 lines (32 loc) • 1.16 kB
text/typescript
import { globalContainer } from "./container";
import { ArgumentsError } from "./errors";
import type { ScopeHandler } from "./types";
export class Scopes {
public static Singleton(): ScopeHandler {
return function SingletonScope(descriptor, args) {
if (args.length > 0) {
throw new ArgumentsError(SingletonScope.name, descriptor.class.name);
}
return globalContainer.$getInstance(descriptor);
};
}
public static Transient(): ScopeHandler {
return function TransientScope(descriptor, args, container) {
return container.$getInstance(descriptor, args, false);
};
}
public static Container(): ScopeHandler {
return function ContainerScope(descriptor, args, container) {
if (args.length > 0) {
throw new ArgumentsError(ContainerScope.name, descriptor.class.name);
}
return container.$getInstance(descriptor);
};
}
public static Resolution(): ScopeHandler {
return function ResolutionScope(descriptor, args, _, resolutionContainer) {
return resolutionContainer.$getInstance(descriptor, args);
};
}
public static Scoped = Scopes.Container;
}