Mercurial > pub > ImplabNet
annotate 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 |
| rev | line source |
|---|---|
| 267 | 1 using System; |
| 277 | 2 using System.Collections.Generic; |
| 268 | 3 using System.Diagnostics; |
| 272 | 4 using System.Linq; |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
5 using Implab.Components; |
| 268 | 6 using Implab.Diagnostics; |
| 267 | 7 using Implab.ServiceHost.Unity; |
| 229 | 8 using Implab.Xml; |
| 267 | 9 using Unity; |
| 10 using Unity.Injection; | |
| 272 | 11 using Unity.Registration; |
| 229 | 12 |
| 13 namespace Implab.Playground { | |
| 267 | 14 |
| 15 public class Foo { | |
| 269 | 16 |
| 17 public class Bar { | |
| 18 | |
| 19 } | |
| 20 | |
| 270 | 21 public string Name { get; set; } |
| 22 | |
| 267 | 23 public int IntValue { get; set; } |
| 24 | |
| 25 public string StringValue { get; set; } | |
| 26 | |
| 277 | 27 public void AddRange(Foo[] items) { |
| 28 Console.WriteLine($"AddRange: Foo[]"); | |
| 29 } | |
| 30 | |
| 267 | 31 } |
| 32 | |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
33 public class FooFactory : IFactory<Foo>, IFactory<Foo.Bar> { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
34 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
35 public bool UseSsl { get; set; } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
36 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
37 public string Connection { get; set; } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
38 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
39 public Foo Create() { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
40 return new Foo() { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
41 Name = "AutoFac" |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
42 }; |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
43 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
44 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
45 Foo.Bar IFactory<Foo.Bar>.Create() { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
46 return new Foo.Bar(); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
47 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
48 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
49 |
| 272 | 50 public interface IContainer<T> { |
| 51 T Instance { get; set; } | |
| 52 } | |
| 53 | |
| 54 public class Container<T> : IContainer<T> { | |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
55 public class Bar { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
56 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
57 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
58 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
59 public class Bar<T2> { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
60 public class Baz { |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
61 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
62 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
63 |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
64 } |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
65 |
| 267 | 66 public Container() { |
| 67 | |
| 68 } | |
| 69 | |
| 70 public Container(T instance) { | |
| 71 Instance = instance; | |
| 72 } | |
| 73 | |
| 74 public T Instance { get; set; } | |
| 270 | 75 |
| 76 public void SetInstance(T value) { | |
| 77 Instance = value; | |
| 78 } | |
| 277 | 79 |
| 80 public void AddRange(List<T> items) { | |
| 81 Console.WriteLine($"AddRange: {typeof(List<T>)}"); | |
| 82 } | |
| 83 | |
| 84 public void AddRange(T[] items) { | |
| 85 Console.WriteLine($"AddRange: T[] ofType {typeof(T[])}"); | |
| 86 } | |
| 267 | 87 } |
|
255
b00441e04738
Adde workaround to the behaviour of the logical operations stack in conjuction
cin
parents:
236
diff
changeset
|
88 |
| 229 | 89 public class Program { |
| 90 | |
|
255
b00441e04738
Adde workaround to the behaviour of the logical operations stack in conjuction
cin
parents:
236
diff
changeset
|
91 static void Main(string[] args) { |
| 277 | 92 var listener = new SimpleTraceListener(Console.Out); |
| 93 var source = Trace<TypeResolver>.TraceSource; | |
| 94 source.Switch.Level = SourceLevels.All; | |
| 95 source.Listeners.Add(listener); | |
| 96 | |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
97 var resolver = new TypeResolver(); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
98 resolver.AddNamespace("System"); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
99 resolver.AddNamespace("System.Collections.Generic"); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
100 resolver.AddNamespace("Implab.Playground"); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
101 resolver.AddMapping("string", typeof(string)); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
102 resolver.AddMapping("listOf`1", typeof(List<>)); |
|
273
79110a16cab7
Working on Unity xml configuration: Refactoring in progress
cin
parents:
272
diff
changeset
|
103 |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
104 var spec = TypeReference.Parse("Container{listOf{string}}+Bar{List{string}}"); |
|
273
79110a16cab7
Working on Unity xml configuration: Refactoring in progress
cin
parents:
272
diff
changeset
|
105 |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
106 var t = resolver.Resolve(spec, true); |
| 277 | 107 |
|
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
108 Console.WriteLine("{0}", t); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
109 Console.WriteLine("Spec: {0}", spec); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
110 Console.WriteLine("IsGenericType: {0}", t.IsGenericType); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
111 Console.WriteLine("IsGenericTypeDefinition: {0}", t.IsGenericTypeDefinition); |
|
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
277
diff
changeset
|
112 Console.WriteLine("ContainsGenericParameters: {0}", t.ContainsGenericParameters); |
| 272 | 113 } |
| 268 | 114 |
| 272 | 115 static void DisplayContainerRegistrations(IUnityContainer theContainer) { |
| 116 string regName, regType, mapTo, lifetime; | |
| 117 Console.WriteLine("Container has {0} Registrations:", | |
| 118 theContainer.Registrations.Count()); | |
| 119 foreach (ContainerRegistration item in theContainer.Registrations) { | |
| 120 regType = item.RegisteredType.FullName; | |
| 121 mapTo = item.MappedToType.FullName; | |
| 122 regName = item.Name ?? "[default]"; | |
| 123 lifetime = item.LifetimeManager.LifetimeType.Name; | |
| 124 if (mapTo != regType) { | |
| 125 mapTo = " -> " + mapTo; | |
| 126 } else { | |
| 127 mapTo = string.Empty; | |
| 128 } | |
| 129 lifetime = lifetime.Substring(0, lifetime.Length - "LifetimeManager".Length); | |
| 130 Console.WriteLine("+ {0}{1} '{2}' {3}", regType, mapTo, regName, lifetime); | |
| 131 } | |
| 233 | 132 } |
| 229 | 133 |
| 134 | |
| 135 } | |
| 136 } |
