1 module tests.template_register; 2 3 import std.stdio; 4 import std.array; 5 import unit_threaded; 6 7 import tests.utils; 8 import endovena; 9 10 interface IQueue(T) { 11 void enqueue(T value); 12 T dequeue(); 13 } 14 15 class Queue(T): IQueue!(T) { 16 private T[] data; 17 18 void enqueue(T value) { 19 this.data ~= value; 20 } 21 22 T dequeue() { 23 T x = this.data.front(); 24 this.data.popFront(); 25 return x; 26 } 27 } 28 29 interface IQueueClient(T) { 30 @property IQueue!T service(); 31 } 32 33 class QueueClient(T): IQueueClient!T { 34 public this(IQueue!T service) { 35 _service = service; 36 } 37 private IQueue!T _service; 38 @property IQueue!T service() { return _service; } 39 } 40 41 42 @UnitTest 43 void register_as_types() { 44 Container container = new Container; 45 46 container.register!(IQueue!int, Queue!int)(); 47 container.register!(IQueueClient!int, QueueClient!int)(); 48 49 auto q = container.get!(IQueue!int)(); 50 q.instanceof!(Queue!int).shouldBeTrue; 51 52 auto client = container.get!(IQueueClient!int)(); 53 client.shouldNotBeNull; 54 client 55 .instanceof!(QueueClient!int) 56 .shouldBeTrue; 57 58 client.service 59 .instanceof!(Queue!int) 60 .shouldBeTrue; 61 } 62 /* 63 template Foo(bool numeric) { 64 static if (numeric) { 65 alias Type = int; 66 } else { 67 alias Type = string; 68 } 69 //enum x = Concat(); 70 71 class Concat { 72 string con(Type a) { 73 return a.stringof; 74 } 75 } 76 } 77 78 @UnitTest 79 void register_template() { 80 auto c = new Foo!(true).Concat; 81 c.con(3).shouldEqual("int"); 82 //Container container = new Container; 83 //container.register!(IQueue!int, Queue!int)(); 84 } 85 */