-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathInjectionExample.hx
More file actions
107 lines (86 loc) · 2.12 KB
/
Copy pathInjectionExample.hx
File metadata and controls
107 lines (86 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// See the file "LICENSE" for the full license governing this code
import minject.Injector;
import Type;
class InjectionExample
{
public static function main()
{
var injector = new Injector();
injector.map(TypeA).asSingleton();
injector.map(TypeB, "foo").toClass(TypeB);
injector.map(Int).toValue(20);
injector.map(ValueType).toValue(TObject);
injector.map('Void -> String').toValue(function () return 'Hello!');
injector.map('Array<Int>').toValue([0,1,2]);
injector.map('Iterable<Int>').toValue([0,1,2]);
injector.map('String -> String -> Bool').toValue(function(a, b) return a == b);
injector.map('haxe.EnumFlags<ValueType>').toValue(new haxe.EnumFlags<ValueType>());
var a = injector.getInstance(TypeA);
a.id = 123;
var c = new TypeC();
c.id = 666;
injector.map(TypeB, "bar").toValue(c);
var foo = new Foo();
injector.injectInto(foo);
trace('foo.a ${foo.a}');
trace('foo.b ${foo.b}');
trace('foo.c ${foo.c}');
trace('foo.cb() ${foo.cb()}');
trace('foo.fn() ${foo.fn("a", "b")}');
trace('foo.integer ${foo.integer}');
trace('foo.array ${foo.array}');
trace('foo.iter ${foo.iter}');
trace('foo.enumValue ${foo.enumValue}');
trace('foo.flags ${foo.flags}');
// trace(minject.Injector.getExprTypeId(function () return ''));
}
}
class Foo
{
@inject public var a:TypeA;
@inject("foo") public var b:TypeB;
@inject("bar") public var c:TypeB;
@inject public var cb:Void -> String;
@inject public var fn:String -> String -> Bool;
@inject public var integer:Int;
@inject public var array:Array<Int>;
@inject public var iter:Iterable<Int>;
@inject public var enumValue:ValueType;
@inject public var flags:haxe.EnumFlags<Type.ValueType>;
public function new(){}
}
class TypeA
{
public var id:Int;
public function new()
{
id = 0;
}
public function toString():String
{
return 'TypeA $id';
}
}
class TypeB
{
public var id:Int;
public function new()
{
id = 0;
}
public function toString():String
{
return 'TypeB $id';
}
}
class TypeC extends TypeB
{
public function new()
{
super();
}
override public function toString():String
{
return 'TypeC $id';
}
}