Ich bin ziemlich vertraut mit Abhängigkeitsinjektion und Inversion der Kontrolle in verschiedenen Sprachen und als Konzepte. Ich kann mich jedoch nicht dazu durchringen, ein Muster wie im folgenden Beispiel mit den besten Praktiken von AngularJS zu erreichen.Abhängigkeitsinjektion und Inversion der Kontrolle in AngularJS
Ich versuche, eine Objekt-Registrierung zu erstellen, in der Objekte hinzugefügt und später durch einen Schlüssel abgerufen werden können.
function (angular) {
'use strict';
angular.module('sample')
.service('ObjectRegistry', function() {
var members = [];
this.addMember = function(key, object) {
members[key] = object;
}
this.getMember = function(key) {
return members[key] || {};
}
})
.service('ObjectInstance', [ 'ObjectRegistry', function (ObjectRegistry) {
this.doSomething = function() {};
ObjectRegistry.addMember("my-key", this);
}])
.controller('MyController', [ 'ObjectRegistry', function (ObjectRegistry) {
// Here I need to get ObjectRegistry populated with all services that register themselves in the registry, in this example, with ObjectInstance under the key "my-key"
});
}(angular));
Das Problem ist, dass ObjectRegistry nie da ObjectInstance bevölkert wird nie initialisiert (und ich will nicht von der Steuerung zu tun haben).
Was wäre der beste Ansatz, um dies in Angular zu erreichen? Ich kenne zum Beispiel Symfonys DI-Container und Compiler-Pässe, die es erlauben, dieses Muster zu replizieren, aber ich bin mir nicht sicher, wie ich es mit Angulars DI machen soll.
Warum Möchten Sie eine zweite Registrierung? – zeroflagL
Viele Gründe, der aktuelle Anwendungsfall ähnelt einer Plugin-Registry. –