feat: use inject container

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
MiaoWoo 2020-01-17 11:10:30 +08:00
parent 0595c3c046
commit 72627c08bc
3 changed files with 10 additions and 8 deletions

View File

@ -18,7 +18,7 @@ export namespace plugin {
*/ */
export interface PluginManager { export interface PluginManager {
scan(folder: string): void; scan(folder: string): void;
build(container: Container): void; build(): void;
load(...args: any[]): void; load(...args: any[]): void;
enable(...args: any[]): void; enable(...args: any[]): void;
disable(...args: any[]): void; disable(...args: any[]): void;

View File

@ -2,7 +2,7 @@ import { interfaces, Container } from "inversify";
let _container: Container; let _container: Container;
const CONTAINER = Symbol.for("@ms/ioc:Container"); const ContainerInstance = Symbol.for("@ms/ioc:Container");
const INJECTION = Symbol.for("INJECTION"); const INJECTION = Symbol.for("INJECTION");
function _proxyGetter( function _proxyGetter(
@ -35,12 +35,12 @@ function _proxyGetter(
} }
function initContainer(container: Container) { function initContainer(container: Container) {
Reflect.defineMetadata(CONTAINER, container, Reflect); Reflect.defineMetadata(ContainerInstance, container, Reflect);
_container = container; _container = container;
} }
function getContainer(): Container { function getContainer(): Container {
return _container || Reflect.getMetadata(CONTAINER, Reflect) return _container || Reflect.getMetadata(ContainerInstance, Reflect)
} }
function makePropertyInjectDecorator(doCache: boolean) { function makePropertyInjectDecorator(doCache: boolean) {
@ -97,6 +97,7 @@ let lazyMultiInject = makePropertyMultiInjectDecorator(doCache)
export { export {
initContainer, initContainer,
getContainer, getContainer,
ContainerInstance,
lazyInject, lazyInject,
lazyInjectNamed, lazyInjectNamed,
lazyInjectTagged, lazyInjectTagged,

View File

@ -3,7 +3,7 @@ import '@ms/nashorn'
import { plugin, server, task, MiaoScriptConsole } from '@ms/api' import { plugin, server, task, MiaoScriptConsole } from '@ms/api'
import { PluginManagerImpl } from '@ms/plugin' import { PluginManagerImpl } from '@ms/plugin'
import { XMLHttpRequest as xhr } from '@ms/ployfill' import { XMLHttpRequest as xhr } from '@ms/ployfill'
import { DefaultContainer as container, injectable, inject, postConstruct } from '@ms/container' import { DefaultContainer as container, injectable, inject, ContainerInstance } from '@ms/container'
let startTime = new Date().getTime(); let startTime = new Date().getTime();
@ -23,7 +23,7 @@ class MiaoScriptCore {
console.log('MiaoScript engine loading completed... Done (' + (new Date().getTime() - startTime) / 1000 + 's)!'); console.log('MiaoScript engine loading completed... Done (' + (new Date().getTime() - startTime) / 1000 + 's)!');
return () => this.disable(); return () => this.disable();
} }
loadServerConsole() { loadServerConsole() {
// @ts-ignore // @ts-ignore
console = new this.Console(); console = new this.Console();
@ -39,7 +39,7 @@ class MiaoScriptCore {
loadPlugins() { loadPlugins() {
this.pluginManager.scan('plugins'); this.pluginManager.scan('plugins');
this.pluginManager.build(container); this.pluginManager.build();
this.pluginManager.load(); this.pluginManager.load();
this.pluginManager.enable(); this.pluginManager.enable();
} }
@ -49,7 +49,7 @@ class MiaoScriptCore {
} }
} }
function detectServer(){ function detectServer() {
let type = 'unknow' let type = 'unknow'
try { try {
Java.type("org.bukkit.Bukkit"); Java.type("org.bukkit.Bukkit");
@ -75,6 +75,7 @@ function detectServer(){
function init() { function init() {
console.info('Initialization MiaoScript Core Package @ms/core. Please wait...') console.info('Initialization MiaoScript Core Package @ms/core. Please wait...')
container.bind(ContainerInstance).toConstantValue(container);
container.bind(plugin.PluginInstance).toConstantValue(base.getInstance()); container.bind(plugin.PluginInstance).toConstantValue(base.getInstance());
let type = detectServer(); let type = detectServer();
require(`@ms/${type}`); require(`@ms/${type}`);