Angular IoC最佳实践

时间:2015-10-15 10:10:31

标签: angularjs dependency-injection inversion-of-control

当需要根据环境使用不同的服务/工厂实现时,AngularJS中的最佳做法是什么。

我们假设我有一项服务MessageService,它正在注入其他一些服务,但根据设备/平台,它应该使用WebServiceMobileService

以下是我现在所做的事情:

  angular
    .module('message')
    .service('MessageService', messageService);

  var service = 'WebService';
  if (mobileDevice) {
    service = 'MobileService';
  }

  messageService.$inject = [service];

  function messageService(service) {
    service.call(); // use the shared interface for both services inside this service
  }

有更好 - 更优雅的方式吗?

1 个答案:

答案 0 :(得分:1)

您可以使用模块的'config'块来使用像这里的'提供者'那样做 -

angular.module('app').config(['$provide', '$injector', 'mobileDevice',
  function($provide, $injector, mobileDevice) {
    $provide.value('MessageService', (mobileDevice) ? $injector.get('MobileService') : $injector.get('WebService'));
  }
]);
 

这假设'mobileDevice'是一个角度常数。

现在你可以注入'MessageService'来做你想做的事。