How to create a helper assistant for something other than a service?

https://github.com/emberjs/ember.js/blob/5fd2d035b30aa9ebfe73de824b3b283ec8e589cc/packages/ember-runtime/lib/system/service.js#L31

In the line I refer to above, the ember-core command imports this createInjectionHelper and uses it to add a clean / simple api for injection services such as

App.ApplicationRoute = Ember.Route.extend({
  authManager: Ember.inject.service('auth'),
  model: function() {
    return this.get('authManager').findCurrentUser();
  }
});

How can I create something like this for a non-service?

+4
source share
2 answers

Using your example will change a bit from what you had above. We will talk about what makes Repositories injections a bit.

import injectRepositories from 'app/utils/inject';

export default Ember.Route.extend({
    repository: injectRepositories('person'),
    model: function() {
    var repository = this.get('repository');
        return repository.find();
    }
});

The initializer can be improved with the following changes:

import registerWithContainer from "ember-cli-auto-register/register";

export function initialize(_, application) {
    registerWithContainer("repositories", application);
    application.inject("repositories", "store", "store:main");
}

export default {
    name: "repositories",
    after: "store",
    initialize: initialize
};

Let me break down what happens on every line.

registerWithContainer("repositories", application);

ember-addon ember-cli-auto-register. repositories Ember . , :

application.register("repositories:person", PersonRepository);

ember-addon ember-cli-injection:

// app/utils/inject.js
import inject from "ember-cli-injection/inject";

var injectRepositories = inject("repositories");

export default injectRepositories;

:

import injectRepositories from 'app/utils/inject';

export default Ember.Route.extend({
    repository: injectRepositories('person'),
    model: function() {
    var repository = this.get('repository');
        return repository.find();
    }
});

, , . repositories , (. ember-cli-injection). , . , .

import Ember from 'ember';

var injection = function(key) {
    return function(name) {
        return Ember.computed(function(propertyName) {
            var objectName = name || propertyName;
            return this.container.lookup(key + ':' + objectName);
        });
    };
};

export default injection;

, repository: injectRepositories('person'). , .

, , , person: injectRepositories(). person propertyName, null, objectName person. API, , API- Ember.inject.service Ember.inject.controller, Ember 1.10.

+6

, . - App.inject(), ember , ember-cli.

:

// Register the service
App.register('service:auth', {
  findCurrentUser: function() {
    // Do your magic
  }
}, { instantiate: false });

App.inject('route', 'auth', 'service:auth');

this.auth.findCurrentUser();. , . , , auth .

:

http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/#toc_dependency-injection-with-code-register-inject-code

"". , , , .

0

All Articles