provy v1.2.1
Provy
Simple and versatile dependency injection container.
Installation
npm install provyOr
yarn add provyUsage
import { Container, Identifier } from 'provy';
type UserService = {
getUser(id: string): Promise<User>;
};
class UserServiceImpl implements UserService {
private readonly apiUrl: string;
constructor(apiUrl: string) {
this.apiUrl = apiUrl;
}
getUser(id) {
return fetch(`${this.apiUrl}/users/${id}`)
.then((response) => response.data)
.catch((error) => {
throw new Error(`An error occurred: ${error.message}`);
});
}
}
const container = new Container();
const identifiers = {
apiUrl: new Identifier<string>('API_URL'),
userService: new Identifier<UserService>('USER_SERVICE'),
};
container.bindConstant(identifiers.apiUrl, 'https://api.example.com');
container.bindMemoized(identifiers.userService, () => {
return new UserServiceImpl(container.resolve(identifiers.apiUrl));
});API
Container
.alias(identifier, resolveTo)
Registers an alias to another dependency.
.bindConstant(identifier, value)
Registers a constant value.
.bindDynamic(identifier, factory)
Registers a factory function. The factory is called every time a value is
requested with resolve().
.bindMemoized(identifier, factory)
Registers a factory function, which is called only once. The result is then
memoized and returned with subsequent calls to resolve().
.isBound(identifier)
Checks if a dependency is regsitered for the given identifier.
.resolve(identifier)
Returns the value registered for the given identifier. If the identifier is
not registered an error is thrown.
.unbind(identifier)
Unregisters the dependency associated to the given identifier.
Identifier
An Identifier is used to identify a dependency within a Container. It
accepts a generic type which is used to type the return value of the
Container.resolve() function.
.name
The name with which the identifier has been created.
License
MIT