AngularJS/TypeScript: 由于服务无法实例化模块

AngularJS/TypeScript: Failed to instantiate module due to service

我有一个服务:

module app {
    export interface ISomeService {
        doSomething(): string;
    }

    export class SomeService implements ISomeService {
        doSomething() {
            return "haaay.";
        };
    }

    angular.module('app').service('someService', SomeService);
}

我有一个控制器:

module app {
    export interface ISomeController {
        doControllerThings(): string;
    }

    export class SomeController implements ISomeController {
        static $inject = ['someService'];
        constructor(private someService: ISomeService) { }
        }
    }

    angular.module('app').controller('someController', SomeController);
}

我也有一个路由文件(使用ui-router):

module app {
'use strict';

angular
    .module('app')
    .config(config);

config.$inject = ['$stateProvider', 'someService'];
function config($stateProvider, someService) {
    $stateProvider
    .state('someState', {
        url: '/Home/Hello/',
        parent: 'home',
        resolve: {
            someValues() { return someService.doSomething(); }
        },
        views: {
            'content@': {
                    templateUrl:  /path/to/file/something.html',
                    controller: 'someController',
                    controllerAs: 'vm'
            }
        }
    });
}

我一直收到这个错误,我不确定为什么:

Error: [$injector:modulerr] Failed to instantiate module app due to:
[$injector:unpr] Unknown provider: someService

我知道我的路由文件目前基本上使用的是纯文本 javascript,所以对于看了几个 TypeScript 示例后它变得很碍眼,我深表歉意。

编辑:进行了一些更新。错误 copy/paste 编辑。

a working plunker

重点是——我们不能要求将'someService'注入.config()阶段。在这种情况下,只能注入和配置 Providers

因此,我们需要将服务的依赖项直接移动到 resolver - someValues : ['someService', (someService) => ... // 那就是要问的地方对于 'someService'。因为这会在.run()阶段被调用

angular
    .module('app')
    .config(config);

config.$inject = ['$stateProvider' ];
function config($stateProvider) {
    $stateProvider
    .state('someState', {
        url: '/Home/Hello/',
        parent: 'home',
        resolve: {          
            someValues : ['someService', (someService) =>
                                        { return  someService.doSomething(); }]
        },
        views: {
            'content@': {
                    templateUrl:  'path/to/file/something.html',
                    controller: 'someController',
                    controllerAs: 'vm'
            }
        }
    });
};

实际查看 here