Mercurial > pub > ImplabNet
comparison Implab.Playground/Program.cs @ 278:6691aff01de1 v3
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
Implab.ServiceHost: rewritten TypeReference (added support for nested types), stable API
| author | cin |
|---|---|
| date | Thu, 03 May 2018 09:59:44 +0300 |
| parents | 963b17c275be |
| children | 8714471e8d78 |
comparison
equal
deleted
inserted
replaced
| 277:963b17c275be | 278:6691aff01de1 |
|---|---|
| 1 using System; | 1 using System; |
| 2 using System.Collections.Generic; | 2 using System.Collections.Generic; |
| 3 using System.Diagnostics; | 3 using System.Diagnostics; |
| 4 using System.Linq; | 4 using System.Linq; |
| 5 using Implab.Components; | |
| 5 using Implab.Diagnostics; | 6 using Implab.Diagnostics; |
| 6 using Implab.ServiceHost.Unity; | 7 using Implab.ServiceHost.Unity; |
| 7 using Implab.Xml; | 8 using Implab.Xml; |
| 8 using Unity; | 9 using Unity; |
| 9 using Unity.Injection; | 10 using Unity.Injection; |
| 27 Console.WriteLine($"AddRange: Foo[]"); | 28 Console.WriteLine($"AddRange: Foo[]"); |
| 28 } | 29 } |
| 29 | 30 |
| 30 } | 31 } |
| 31 | 32 |
| 33 public class FooFactory : IFactory<Foo>, IFactory<Foo.Bar> { | |
| 34 | |
| 35 public bool UseSsl { get; set; } | |
| 36 | |
| 37 public string Connection { get; set; } | |
| 38 | |
| 39 public Foo Create() { | |
| 40 return new Foo() { | |
| 41 Name = "AutoFac" | |
| 42 }; | |
| 43 } | |
| 44 | |
| 45 Foo.Bar IFactory<Foo.Bar>.Create() { | |
| 46 return new Foo.Bar(); | |
| 47 } | |
| 48 } | |
| 49 | |
| 32 public interface IContainer<T> { | 50 public interface IContainer<T> { |
| 33 T Instance { get; set; } | 51 T Instance { get; set; } |
| 34 } | 52 } |
| 35 | 53 |
| 36 public class Container<T> : IContainer<T> { | 54 public class Container<T> : IContainer<T> { |
| 55 public class Bar { | |
| 56 | |
| 57 } | |
| 58 | |
| 59 public class Bar<T2> { | |
| 60 public class Baz { | |
| 61 | |
| 62 } | |
| 63 | |
| 64 } | |
| 65 | |
| 37 public Container() { | 66 public Container() { |
| 38 | 67 |
| 39 } | 68 } |
| 40 | 69 |
| 41 public Container(T instance) { | 70 public Container(T instance) { |
| 63 var listener = new SimpleTraceListener(Console.Out); | 92 var listener = new SimpleTraceListener(Console.Out); |
| 64 var source = Trace<TypeResolver>.TraceSource; | 93 var source = Trace<TypeResolver>.TraceSource; |
| 65 source.Switch.Level = SourceLevels.All; | 94 source.Switch.Level = SourceLevels.All; |
| 66 source.Listeners.Add(listener); | 95 source.Listeners.Add(listener); |
| 67 | 96 |
| 68 var stopwatch = new Stopwatch(); | 97 var resolver = new TypeResolver(); |
| 69 stopwatch.Start(); | 98 resolver.AddNamespace("System"); |
| 99 resolver.AddNamespace("System.Collections.Generic"); | |
| 100 resolver.AddNamespace("Implab.Playground"); | |
| 101 resolver.AddMapping("string", typeof(string)); | |
| 102 resolver.AddMapping("listOf`1", typeof(List<>)); | |
| 70 | 103 |
| 71 var ctx = new ContainerBuilder(); | 104 var spec = TypeReference.Parse("Container{listOf{string}}+Bar{List{string}}"); |
| 72 | 105 |
| 73 Console.WriteLine($"Created: {stopwatch.ElapsedMilliseconds}"); | 106 var t = resolver.Resolve(spec, true); |
| 74 stopwatch.Restart(); | |
| 75 | |
| 76 ctx.LoadConfig("data/sample.xml"); | |
| 77 | 107 |
| 78 Console.WriteLine($"Loaded: {stopwatch.ElapsedMilliseconds}"); | 108 Console.WriteLine("{0}", t); |
| 79 | 109 Console.WriteLine("Spec: {0}", spec); |
| 80 var container = ctx.Container; | 110 Console.WriteLine("IsGenericType: {0}", t.IsGenericType); |
| 81 | 111 Console.WriteLine("IsGenericTypeDefinition: {0}", t.IsGenericTypeDefinition); |
| 82 stopwatch.Restart(); | 112 Console.WriteLine("ContainsGenericParameters: {0}", t.ContainsGenericParameters); |
| 83 var instace1 = container.Resolve<IContainer<string>>(); | |
| 84 Console.WriteLine($"Resolved1: {stopwatch.ElapsedMilliseconds}"); | |
| 85 | |
| 86 stopwatch.Restart(); | |
| 87 var instace2 = container.Resolve<IContainer<Foo>>(); | |
| 88 Console.WriteLine($"Resolved2: {stopwatch.ElapsedMilliseconds}"); | |
| 89 | |
| 90 DisplayContainerRegistrations(container); | |
| 91 } | 113 } |
| 92 | 114 |
| 93 static void DisplayContainerRegistrations(IUnityContainer theContainer) { | 115 static void DisplayContainerRegistrations(IUnityContainer theContainer) { |
| 94 string regName, regType, mapTo, lifetime; | 116 string regName, regType, mapTo, lifetime; |
| 95 Console.WriteLine("Container has {0} Registrations:", | 117 Console.WriteLine("Container has {0} Registrations:", |
