comparison Implab.ServiceHost/Unity/ConfigurationContext.cs @ 272:9d1cca834b05 v3

preview version of Unity xml configuration
author cin
date Thu, 26 Apr 2018 03:14:54 +0300
parents ade80d94dfb5
children
comparison
equal deleted inserted replaced
271:d4d437ec4483 272:9d1cca834b05
6 namespace Implab.ServiceHost.Unity { 6 namespace Implab.ServiceHost.Unity {
7 using System.Linq; 7 using System.Linq;
8 using System.Reflection; 8 using System.Reflection;
9 using System.Text; 9 using System.Text;
10 using global::Unity; 10 using global::Unity;
11 using global::Unity.Registration;
11 using Implab.Xml; 12 using Implab.Xml;
12 using static Trace<ConfigurationContext>; 13 using static Trace<ConfigurationContext>;
13 14
14 public class ConfigurationContext { 15 public class ConfigurationContext {
15 16
16 readonly TypeResolver m_resolver; 17 readonly TypeResolver m_resolver;
17 18
18 19 readonly UnityContainer m_container;
19 20
20 readonly UnityContainer m_container;
21
22 public ConfigurationContext(UnityContainer container) { 21 public ConfigurationContext(UnityContainer container) {
23 m_container = container ?? new UnityContainer(); 22 m_container = container ?? new UnityContainer();
24 m_resolver = new TypeResolver(); 23 m_resolver = new TypeResolver();
25 } 24 }
26 25
27 26
28 public Type Resolve(string typeReference) { 27 public Type Resolve(string typeReference) {
29 return m_resolver.Resolve(TypeReference.Parse(typeReference)); 28 return m_resolver.Resolve(TypeReference.Parse(typeReference));
30 } 29 }
31 30
32 internal void Visit(AbstractRegistration descriptor) { 31 internal void Visit(RegisterElement descriptor) {
33 32 var registrationContext = new RegistrationContext(m_resolver, descriptor.ProvidesType, descriptor.ImplementationType);
33
34 if (descriptor.Injectors != null) {
35 foreach (var injector in descriptor.Injectors) {
36 injector.Visit(registrationContext);
37 }
38 }
39
40 m_container.RegisterType(
41 registrationContext.RegistrationType,
42 registrationContext.ImplementationType,
43 descriptor.Name,
44 descriptor.Lifetime?.GetLifetimeManager(this),
45 registrationContext.Injections
46 );
47
34 } 48 }
35 49
36 internal void Visit(NamespaceElement namespaceElement) { 50 internal void Visit(NamespaceElement namespaceElement) {
37 m_resolver.AddNamespace(namespaceElement.Name); 51 m_resolver.AddNamespace(namespaceElement.Name);
38 } 52 }