首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入json值时缺少@Injectable注释

导入json值时缺少@Injectable注释
EN

Stack Overflow用户
提问于 2020-05-01 13:46:03
回答 1查看 272关注 0票数 0

我目前正在尝试将一个json文件插入到我正在构建的服务中。这个类通过构造函数中的@inject()标记注入json。下面你可以找到我正在使用的代码。

DiContainer.ts

代码语言:javascript
复制
import { Container, decorate, injectable } from "inversify";
import { IResponseBuilder, InjectionTypes, IUserIdGenerator, ILogger, IResponseRepository, IResponseService, IContextService, IFileWriter, IBoardSessionService, IIntent } from "./src/common/types";
import GoogleResponseBuilder from "./src/common/builders/googleResponseBuilder";
import UserIdGenerator from "./src/common/helpers/userIdGenerator";
import { DialogflowConversation } from "actions-on-google";
import WinstonLogger from "./src/common/winstonLogger";
import FileWriter from "./src/common/helpers/fileWriter";
import TextResponseRepository from "./src/repositories/textResponseRepository";
import SsmlResponseRepository from "./src/repositories/ssmlResponseRepository";
import ResponseSerivce from "./src/services/responseService";
import ContextService from "./src/services/contextService";
import { BoardService } from "./src/services/boardService";
import { BoardSessionService } from "./src/services/boardSessionService";
import WelcomeIntent from "./src/intents/new/welcomeIntent";
import uuid from "uuid/v4";

const sessionJson = require("./src/data/boardSessions.json");



const DIContainer = new Container();

DIContainer.bind<IResponseBuilder<DialogflowConversation>>(InjectionTypes.GoogleResponseBuilder).to(GoogleResponseBuilder);
DIContainer.bind<ILogger>(InjectionTypes.WinstonLogger).to(WinstonLogger);
DIContainer.bind<IFileWriter>(InjectionTypes.FileWriter).to(FileWriter);
DIContainer.bind<IUserIdGenerator>(InjectionTypes.UserIdGenerator).to(UserIdGenerator);

DIContainer.bind<IIntent>(InjectionTypes.WelcomeIntent).to(WelcomeIntent);

DIContainer.bind<IResponseRepository>(InjectionTypes.TextResponseRepository).to(TextResponseRepository);
DIContainer.bind<IResponseRepository>(InjectionTypes.SsmlResponseRepository).to(SsmlResponseRepository);
DIContainer.bind<IResponseService>(InjectionTypes.ResponseService).to(ResponseSerivce);
DIContainer.bind<IBoardSessionService>(InjectionTypes.BoardSessionService).to(BoardSessionService);
DIContainer.bind<IContextService>(InjectionTypes.ContextService).to(ContextService);

DIContainer.bind(InjectionTypes.SessionJSON).to(sessionJson);
DIContainer.bind(InjectionTypes.UUIDv4).toFunction(uuid);


export default DIContainer;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-01 14:06:59

您试图通过@inject注入的每个依赖都必须标记为@injectable,并通过bind注册。我真的不知道装饰函数是如何工作的(所以我不知道你是否可以用它来标记函数,而不是一个可注射的类)。

顺便说一句,我认为只要将依赖项注册为动态值并返回所需的函数(如声明的这里 ),就可以实现您想要的结果。在你的例子中,像这样的事情:

代码语言:javascript
复制
DIContainer.bind(InjectionTypes.UUIDv4).toDynamicValue((context: interfaces.Context) => { return uuid });

或者,您可以直接导入服务中的函数,而不需要注入它,或者将函数封装到可以标记为可注入的另一个服务中(假设是uuid提供者服务)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61543709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档