Program.cs
114 lines
| 3.3 KiB
| text/x-csharp
|
CSharpLexer
/ Implab.Playground / Program.cs
cin
|
r267 | using System; | ||
cin
|
r277 | using System.Collections.Generic; | ||
cin
|
r268 | using System.Diagnostics; | ||
cin
|
r272 | using System.Linq; | ||
cin
|
r268 | using Implab.Diagnostics; | ||
cin
|
r267 | using Implab.ServiceHost.Unity; | ||
cin
|
r229 | using Implab.Xml; | ||
cin
|
r267 | using Unity; | ||
using Unity.Injection; | ||||
cin
|
r272 | using Unity.Registration; | ||
cin
|
r229 | |||
namespace Implab.Playground { | ||||
cin
|
r267 | |||
public class Foo { | ||||
cin
|
r269 | |||
public class Bar { | ||||
} | ||||
cin
|
r270 | public string Name { get; set; } | ||
cin
|
r267 | public int IntValue { get; set; } | ||
public string StringValue { get; set; } | ||||
cin
|
r277 | public void AddRange(Foo[] items) { | ||
Console.WriteLine($"AddRange: Foo[]"); | ||||
} | ||||
cin
|
r267 | } | ||
cin
|
r272 | public interface IContainer<T> { | ||
T Instance { get; set; } | ||||
} | ||||
public class Container<T> : IContainer<T> { | ||||
cin
|
r267 | public Container() { | ||
} | ||||
public Container(T instance) { | ||||
Instance = instance; | ||||
} | ||||
public T Instance { get; set; } | ||||
cin
|
r270 | |||
public void SetInstance(T value) { | ||||
Instance = value; | ||||
} | ||||
cin
|
r277 | |||
public void AddRange(List<T> items) { | ||||
Console.WriteLine($"AddRange: {typeof(List<T>)}"); | ||||
} | ||||
public void AddRange(T[] items) { | ||||
Console.WriteLine($"AddRange: T[] ofType {typeof(T[])}"); | ||||
} | ||||
cin
|
r267 | } | ||
cin
|
r255 | |||
cin
|
r229 | public class Program { | ||
cin
|
r255 | static void Main(string[] args) { | ||
cin
|
r277 | var listener = new SimpleTraceListener(Console.Out); | ||
var source = Trace<TypeResolver>.TraceSource; | ||||
source.Switch.Level = SourceLevels.All; | ||||
source.Listeners.Add(listener); | ||||
cin
|
r273 | var stopwatch = new Stopwatch(); | ||
stopwatch.Start(); | ||||
cin
|
r255 | |||
cin
|
r274 | var ctx = new ContainerBuilder(); | ||
cin
|
r273 | |||
Console.WriteLine($"Created: {stopwatch.ElapsedMilliseconds}"); | ||||
cin
|
r277 | stopwatch.Restart(); | ||
cin
|
r273 | ctx.LoadConfig("data/sample.xml"); | ||
cin
|
r271 | |||
cin
|
r273 | Console.WriteLine($"Loaded: {stopwatch.ElapsedMilliseconds}"); | ||
var container = ctx.Container; | ||||
cin
|
r277 | stopwatch.Restart(); | ||
cin
|
r273 | var instace1 = container.Resolve<IContainer<string>>(); | ||
Console.WriteLine($"Resolved1: {stopwatch.ElapsedMilliseconds}"); | ||||
cin
|
r277 | |||
stopwatch.Restart(); | ||||
cin
|
r273 | var instace2 = container.Resolve<IContainer<Foo>>(); | ||
Console.WriteLine($"Resolved2: {stopwatch.ElapsedMilliseconds}"); | ||||
cin
|
r271 | |||
cin
|
r272 | DisplayContainerRegistrations(container); | ||
} | ||||
cin
|
r268 | |||
cin
|
r272 | static void DisplayContainerRegistrations(IUnityContainer theContainer) { | ||
string regName, regType, mapTo, lifetime; | ||||
Console.WriteLine("Container has {0} Registrations:", | ||||
theContainer.Registrations.Count()); | ||||
foreach (ContainerRegistration item in theContainer.Registrations) { | ||||
regType = item.RegisteredType.FullName; | ||||
mapTo = item.MappedToType.FullName; | ||||
regName = item.Name ?? "[default]"; | ||||
lifetime = item.LifetimeManager.LifetimeType.Name; | ||||
if (mapTo != regType) { | ||||
mapTo = " -> " + mapTo; | ||||
} else { | ||||
mapTo = string.Empty; | ||||
} | ||||
lifetime = lifetime.Substring(0, lifetime.Length - "LifetimeManager".Length); | ||||
Console.WriteLine("+ {0}{1} '{2}' {3}", regType, mapTo, regName, lifetime); | ||||
} | ||||
cin
|
r233 | } | ||
cin
|
r229 | |||
} | ||||
} | ||||