Ответ 1
Не так, как вы могли бы надеяться. Служебные экземпляры создаются в первый раз, когда они извлекаются инжектором и поддерживаются инжектором... другими словами, они всегда одиночные. Здесь происходит волшебство, особенно посмотрите на функцию provider
, которая помещает экземпляр поставщика в объект providerCache.
Но не теряйте надежду, вы можете так же легко добавлять конструкторы для того, что вы хотите использовать в Сервисе, если вы так выбрали:
app.factory('myService', [function() {
var i = 1;
function Foo() {
this.bar = "I'm Foo " + i++;
};
return {
Foo: Foo
};
}]);
app.controller('Ctrl1', function($scope, myService) {
$scope.foo = new myService.Foo();
console.log($scope.foo.bar) //I'm Foo 1
});
app.controller('Ctrl2', function($scope, myService) {
$scope.foo = new myService.Foo();
console.log($scope.foo.bar) //I'm Foo 2
});
EDIT: как указывал OP, существует также $injector.instantiate, который вы можете использовать для вызова конструкторов JavaScript за пределами вашего контроллера. Я не уверен, что подразумевается при тестировании здесь, но это дает вам еще один способ ввести код, который будет создавать для вас новый объект.