UNPKG

6.63 kBJavaScriptView Raw
1/**
2 * Root Container
3 * @see /dev-docs/IoC 容器、依赖注入与服务说明.md
4 */
5import 'reflect-metadata';
6import { Container } from 'inversify';
7import getDecorators from 'inversify-inject-decorators';
8import { ComponentManager } from './ComponentManager';
9import { CameraComponent } from './components/camera/CameraComponent';
10import { CameraSystem } from './components/camera/System';
11import { ComputeComponent } from './components/compute/ComputeComponent';
12import { LayoutComputeStrategy } from './components/compute/LayoutComputeStrategy';
13import { ParticleComputeStrategy } from './components/compute/ParticleComputeStrategy';
14import { ComputeSystem } from './components/compute/System';
15import { PassNodeComponent } from './components/framegraph/PassNodeComponent';
16import { ResourceHandleComponent } from './components/framegraph/ResourceHandleComponent';
17import { FrameGraphSystem } from './components/framegraph/System';
18import { GeometryComponent } from './components/geometry/GeometryComponent';
19import { GeometrySystem } from './components/geometry/System';
20import { InteractionSystem } from './components/interaction/System';
21import { MaterialComponent } from './components/material/MaterialComponent';
22import { MaterialSystem } from './components/material/System';
23import { CullableComponent } from './components/mesh/CullableComponent';
24import { MeshComponent } from './components/mesh/MeshComponent';
25import { MeshSystem } from './components/mesh/System';
26import { ForwardRenderPath } from './components/renderpath/Forward';
27import { SceneComponent } from './components/scene/SceneComponent';
28import { SceneSystem } from './components/scene/System';
29import { HierarchyComponent } from './components/scenegraph/HierarchyComponent';
30import { NameComponent } from './components/scenegraph/NameComponent';
31import { SceneGraphSystem } from './components/scenegraph/System';
32import { TransformComponent } from './components/scenegraph/TransformComponent';
33import { IDENTIFIER } from './identifier';
34// @see https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#defaultscope
35export var container = new Container(); // 支持使用 new 而非容器实例化的场景,同时禁止 lazyInject cache
36// @see https://github.com/inversify/inversify-inject-decorators#caching-vs-non-caching-behaviour
37
38var DECORATORS = getDecorators(container, false);
39// Add babel legacy decorators support
40// @see https://github.com/inversify/InversifyJS/issues/1050
41// @see https://github.com/inversify/InversifyJS/issues/1026#issuecomment-504936034
42export var lazyInject = function lazyInject(serviceIdentifier) {
43 var original = DECORATORS.lazyInject(serviceIdentifier); // the 'descriptor' parameter is actually always defined for class fields for Babel, but is considered undefined for TSC
44 // so we just hack it with ?/! combination to avoid "TS1240: Unable to resolve signature of property decorator when called as an expression"
45
46 return function (proto, key, descriptor) {
47 // make it work as usual
48 original.call(this, proto, key); // return link to proto, so own value wont be 'undefined' after component's creation
49
50 if (descriptor) {
51 descriptor.initializer = function () {
52 return proto[key];
53 };
54 }
55 };
56};
57export var lazyMultiInject = function lazyMultiInject(serviceIdentifier) {
58 var original = DECORATORS.lazyMultiInject(serviceIdentifier); // the 'descriptor' parameter is actually always defined for class fields for Babel, but is considered undefined for TSC
59 // so we just hack it with ?/! combination to avoid "TS1240: Unable to resolve signature of property decorator when called as an expression"
60
61 return function (proto, key, descriptor) {
62 // make it work as usual
63 original.call(this, proto, key);
64
65 if (descriptor) {
66 // return link to proto, so own value wont be 'undefined' after component's creation
67 descriptor.initializer = function () {
68 return proto[key];
69 };
70 }
71 };
72};
73/**
74 * bind global component managers in root container
75 */
76
77container.bind(IDENTIFIER.NameComponentManager).toConstantValue(new ComponentManager(NameComponent));
78container.bind(IDENTIFIER.HierarchyComponentManager).toConstantValue(new ComponentManager(HierarchyComponent));
79container.bind(IDENTIFIER.TransformComponentManager).toConstantValue(new ComponentManager(TransformComponent));
80container.bind(IDENTIFIER.CameraComponentManager).toConstantValue(new ComponentManager(CameraComponent));
81container.bind(IDENTIFIER.ResourceHandleComponentManager).toConstantValue(new ComponentManager(ResourceHandleComponent));
82container.bind(IDENTIFIER.PassNodeComponentManager).toConstantValue(new ComponentManager(PassNodeComponent));
83container.bind(IDENTIFIER.MeshComponentManager).toConstantValue(new ComponentManager(MeshComponent));
84container.bind(IDENTIFIER.CullableComponentManager).toConstantValue(new ComponentManager(CullableComponent));
85container.bind(IDENTIFIER.GeometryComponentManager).toConstantValue(new ComponentManager(GeometryComponent));
86container.bind(IDENTIFIER.MaterialComponentManager).toConstantValue(new ComponentManager(MaterialComponent));
87container.bind(IDENTIFIER.SceneComponentManager).toConstantValue(new ComponentManager(SceneComponent));
88container.bind(IDENTIFIER.ComputeComponentManager).toConstantValue(new ComponentManager(ComputeComponent));
89/**
90 * bind systems
91 */
92
93container.bind(IDENTIFIER.Systems).to(SceneGraphSystem).whenTargetNamed(IDENTIFIER.SceneGraphSystem);
94container.bind(IDENTIFIER.Systems).to(SceneSystem).whenTargetNamed(IDENTIFIER.SceneSystem);
95container.bind(IDENTIFIER.Systems).to(CameraSystem).whenTargetNamed(IDENTIFIER.CameraSystem);
96container.bind(IDENTIFIER.Systems).to(FrameGraphSystem).whenTargetNamed(IDENTIFIER.FrameGraphSystem);
97container.bind(IDENTIFIER.Systems).to(MeshSystem).whenTargetNamed(IDENTIFIER.MeshSystem);
98container.bind(IDENTIFIER.Systems).to(GeometrySystem).whenTargetNamed(IDENTIFIER.GeometrySystem);
99container.bind(IDENTIFIER.Systems).to(MaterialSystem).whenTargetNamed(IDENTIFIER.MaterialSystem);
100container.bind(IDENTIFIER.Systems).to(InteractionSystem).whenTargetNamed(IDENTIFIER.InteractionSystem);
101container.bind(IDENTIFIER.Systems).to(ComputeSystem).whenTargetNamed(IDENTIFIER.ComputeSystem);
102container.bind(IDENTIFIER.ForwardRenderPath).to(ForwardRenderPath).inSingletonScope();
103/**
104 * bind compute strategy
105 */
106
107container.bind(IDENTIFIER.ComputeStrategy).to(ParticleComputeStrategy).whenTargetNamed('particle');
108container.bind(IDENTIFIER.ComputeStrategy).to(LayoutComputeStrategy).whenTargetNamed('layout');
109//# sourceMappingURL=inversify.config.js.map
\No newline at end of file