Guest User

Untitled

a guest
Sep 21st, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. // Our dependency container that holds all our dependencies
  2. const dependencyContainer = {};
  3.  
  4. /**
  5. * Inject Decorator: Inject a singleton instance of a service
  6. *
  7. * @export
  8. * @param {*} service
  9. * @param {string} [serviceName] If you are using minification, you may need
  10. * to pass the service name as a string
  11. * @returns
  12. */
  13. export function Inject(service: any, serviceName?: string) {
  14. return (target: any, propName: string): any => {
  15. Object.defineProperty(target, propName, {
  16. get: () => {
  17. const name = (serviceName) ? serviceName : service.name;
  18. if(!dependencyContainer[name]) {
  19. dependencyContainer[name] = new service();
  20. }
  21. return dependencyContainer[name];
  22. }
  23. });
  24. }
  25. }
  26.  
  27.  
  28. /**
  29. * Set / Override a dependency. Useful when running unit tests
  30. *
  31. * @export
  32. * @param {string} serviceName
  33. * @param {*} dependencyInstance
  34. */
  35. export function override(serviceName: string, dependencyInstance: any) {
  36. dependencyContainer[serviceName] = dependencyInstance;
  37. }
  38.  
  39.  
  40. /**
  41. * Get a service, if it does not exist already, we create one
  42. *
  43. * @export
  44. * @param {*} service
  45. * @param {string} [serviceName]
  46. * @returns {*}
  47. */
  48. export function getService(service: any, serviceName?: string): any {
  49. const name = (serviceName) ? serviceName : service.name;
  50. if(!dependencyContainer[name] && service) {
  51. dependencyContainer[name] = new service();
  52. }
  53. return dependencyContainer[name];
  54. }
Add Comment
Please, Sign In to add comment