2016-07-06 2 views
2

Я пытаюсь создать проект NodeJS/TypeScript с использованием InversifyJS, но у меня возникают проблемы с выходом с земли. Я смотрел на это последние пару дней и не могу понять проблему. Все строится правильно, но когда я пытаюсь запустить сервер узла, я получаю следующее сообщение об ошибке:InversifyJS - инъекционная функция не является функцией

TypeError: inversify_1.injectable is not a function 

Я бег NodeJS v6.2.2 (Windows 10 x64) и имею машинопись 1,8 установлена. Я попытался построить, используя VS2015 и глоток. Ниже приведен минимальный пример, который я пробовал, испытывая ту же ошибку. Я не вижу ничего плохого, но я должен упустить что-то очевидное. (Слоппи код в сторону, он должен работать.)

server.ts:

/// <reference path="./node_modules/reflect-metadata/reflect-metadata.d.ts" /> 
/// <reference path="./node_modules/inversify-dts/inversify/inversify.d.ts" /> 
/// <reference path="./typings/index.d.ts" /> 

import "reflect-metadata" 
import { Application } from "./app/app" 
import { ITest, TestClass } from "./app/testclass" 
import { Kernel, injectable, inject } from "inversify" 

var kernel = new Kernel(); 
kernel.bind<ITest>("ITest").to(TestClass); 
kernel.bind<Application>(Application).to(Application); 

var app = kernel.get<Application>(Application); 
app.initialize(); 

приложение/app.ts

/// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> 
/// <reference path="../typings/index.d.ts" /> 

import * as Hapi from "hapi"; 
import { inject, injectable } from "inversify" 
import { ITest } from "../app/testclass" 

@injectable() 
export class Application { 
    private testClass: ITest; 

    constructor(@inject("ITest") test: ITest) { 
     this.testClass = test; 
    }; 

    initialize() { 
     var server = new Hapi.Server({ 
      connections: { 
       router: { 
        isCaseSensitive: false, 
        stripTrailingSlash: true 
       } 
      } 
     }); 

     server.connection({ 
      port: '3000', 
      host: 'localhost' 
     }); 

     server.route({ 
      method: 'GET', 
      path: '/', 
      handler: (request: Hapi.Request, reply: Hapi.IReply) => { 
       var str = this.testClass.test(); 
       reply(str); 
      } 
     }); 

     server.start(function() { 
      console.log('Server running at:', server.info.uri); 
     }); 
    } 
} 

приложение/testclass.ts

/// <reference path="../node_modules/inversify-dts/inversify/inversify.d.ts" /> 

import { injectable } from "inversify" 

export interface ITest { 
    test(): string; 
} 

@injectable() 
export class TestClass implements ITest { 
    test(): string { 
     return "testing"; 
    } 
} 

tsconfig.json

{ 
    "files": [ 
     "server.ts", 
     "app/app.ts", 
     "app/testclass.ts" 
    ], 
    "compilerOptions": { 
     "module": "commonjs", 
     "noImplicitAny": true, 
     "target": "es6", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "outDir": "../release/" 
    } 
} 

полный вывод ошибок от узла:

C:\Projects\inversifytest\release\app\app.js:50 
    inversify_1.injectable(), 
       ^

TypeError: inversify_1.injectable is not a function 
    at Object.<anonymous> (C:\Projects\inversifytest\release\app\app.js:50:17) 
    at Module._compile (module.js:541:32) 
    at Object.Module._extensions..js (module.js:550:10) 
    at Module.load (module.js:458:32) 
    at tryModuleLoad (module.js:417:12) 
    at Function.Module._load (module.js:409:3) 
    at Module.require (module.js:468:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (C:\Projects\inversifytest\release\server.js:6:15) 
    at Module._compile (module.js:541:32) 

ответ

1

я понял это - это была глупая ошибка, как я подозревал. У меня была неправильная версия InversifyJS. Декораторы работают только с новой версией 2.x, а npm установил 1.3.1 (потому что я явно не указал версию).

+0

Спасибо, человек, я сделал ту же тупую ошибку. –

Смежные вопросы