//from most to least verbose, but it is all the same in the end. 
(function() {
    var module = angular.module("myApp.myModel", []);
    
    var MyModel = function MyModel() {
        this.asyncService = null;
        this.someApi = function() {
            return this.asyncService.getStuff(); //promise?
        }
    }
    var myModelProvider = Class.extend({
        model: new MyModel();
        $get: ['asyncService', function (asyncService) {
            model.asyncService = asyncService; //dependency injection
            return model; //resolved for the lifetime of app
        }]
    });
    modules.provider('myModel', myModelProvider);
}())
// or
(function() {
    var module = angular.module("myApp.myModel", []);
    
    var MyModel = function MyModel(asyncService) {
        this.asyncService = null;
        this.someApi = function() {
            return this.asyncService.getStuff(); //promise?
        }
    }
    module.factory('myModel', ['asyncService', function (asyncService) {
        //could do some stuff here
        return new MyModel(asyncService); 
    }]);
}())
// or
(function() {
    var module = angular.module("myApp.myModel", []);
    
    var MyModel = function MyModel(asyncService) {
        this.asyncService = null;
        this.someApi = function() {
            return this.asyncService.getStuff(); //promise?
        }
    }
    module.service('myModel', ['$asyncService', MyModel]); //most simple option
}())