如何使用 inversify 注入 knex?
How can I inject knex using inversify?
如何初始化 knex 并使用 Inversify 依赖注入器将其注入
每个我需要的地方?
我从未使用过Knex
,但我是 InversifyJS 的作者,我会尽力帮助你。
基于 Knex
docs 您可以执行以下操作:
var knex = require('knex')({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
我还找到了 here 类型的 TS。
我假设您要注入的是 knex
实例。您可以执行以下操作:
import * as Knex from 'knex';
import { Kernel } from "inversify";
// configuration
let configuration: Knex.Config = {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
};
// instance
let knex: Knex = Knex(configuration);
let kernel = new Kernel();
kernel.bind<Knex>("Knex").toConstantValue(knex);
这样 knex 将是一个单例。如果你不希望它成为一个单例,你将需要一个工厂:
import * as Knex from 'knex';
import { interfaces, Kernel } from "inversify";
kernel.bind<interfaces.Factory<Knex>>("Factory<Knex>")
.toFactory((ctx: interfaces.Context) => {
return Knex({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
});
你也可以分开配置:
import * as Knex from 'knex';
import { interfaces, Kernel } from "inversify";
kernel.bind<Knex.Config>("KnexConfig").toConstantValue({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
kernel.bind<interfaces.Factory<Knex>>("Factory<Knex>")
.toFactory((ctx: interfaces.Context) => {
let config = context.kernel.get<Knex.Config>("KnexConfig");
return Knex(config);
});
这些解决方案为您提供工厂:
let knexFactory = kernel.get<interfaces.Factory<Knex>>("Factory<Knex>");
let knex = knexFactory();
可以使用 @inject("Factory<Knex>")
注释将工厂注入其他 类。
如果您不想使用单例并且不想使用工厂,那么您将需要动态值注入:
kernel.bind<Knex>("Knex").toDynamicValue((context: interfaces.Context) => {
return Knex({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
});
动态值注入将注入一个新的 knex 实例。不是单例也不是工厂:
let knex = kernel.get<Knex>("Knex>");
请注意,我还没有测试这些建议。我希望他们能引导你朝着正确的方向前进。
如何初始化 knex 并使用 Inversify 依赖注入器将其注入
每个我需要的地方?
我从未使用过Knex
,但我是 InversifyJS 的作者,我会尽力帮助你。
基于 Knex
docs 您可以执行以下操作:
var knex = require('knex')({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
我还找到了 here 类型的 TS。
我假设您要注入的是 knex
实例。您可以执行以下操作:
import * as Knex from 'knex';
import { Kernel } from "inversify";
// configuration
let configuration: Knex.Config = {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
};
// instance
let knex: Knex = Knex(configuration);
let kernel = new Kernel();
kernel.bind<Knex>("Knex").toConstantValue(knex);
这样 knex 将是一个单例。如果你不希望它成为一个单例,你将需要一个工厂:
import * as Knex from 'knex';
import { interfaces, Kernel } from "inversify";
kernel.bind<interfaces.Factory<Knex>>("Factory<Knex>")
.toFactory((ctx: interfaces.Context) => {
return Knex({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
});
你也可以分开配置:
import * as Knex from 'knex';
import { interfaces, Kernel } from "inversify";
kernel.bind<Knex.Config>("KnexConfig").toConstantValue({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
kernel.bind<interfaces.Factory<Knex>>("Factory<Knex>")
.toFactory((ctx: interfaces.Context) => {
let config = context.kernel.get<Knex.Config>("KnexConfig");
return Knex(config);
});
这些解决方案为您提供工厂:
let knexFactory = kernel.get<interfaces.Factory<Knex>>("Factory<Knex>");
let knex = knexFactory();
可以使用 @inject("Factory<Knex>")
注释将工厂注入其他 类。
如果您不想使用单例并且不想使用工厂,那么您将需要动态值注入:
kernel.bind<Knex>("Knex").toDynamicValue((context: interfaces.Context) => {
return Knex({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
});
});
动态值注入将注入一个新的 knex 实例。不是单例也不是工厂:
let knex = kernel.get<Knex>("Knex>");
请注意,我还没有测试这些建议。我希望他们能引导你朝着正确的方向前进。