Mercurial > pub > ImplabNet
comparison Implab.ServiceHost/Unity/ContainerBuilder.cs @ 277:963b17c275be v3
Refactoring
Added <array> element to injection parameters
Working on registrations of factories
author | cin |
---|---|
date | Sat, 28 Apr 2018 18:48:09 +0300 |
parents | 22629bf26121 |
children | 6691aff01de1 |
comparison
equal
deleted
inserted
replaced
276:b4e0f81c7425 | 277:963b17c275be |
---|---|
37 | 37 |
38 public Type ResolveType(string typeReference) { | 38 public Type ResolveType(string typeReference) { |
39 return m_resolver.Resolve(typeReference); | 39 return m_resolver.Resolve(typeReference); |
40 } | 40 } |
41 | 41 |
42 internal void Visit(RegisterElement registerElement) { | 42 |
43 var registrationType = ResolveType(registerElement.RegistrationType); | 43 internal void Visit(TypeAbstractRegistration typeRegistration) { |
44 var implementationType = string.IsNullOrEmpty(registerElement.MapToType) ? registrationType : ResolveType(registerElement.MapToType); | 44 var registrationType = typeRegistration.GetRegistrationType(ResolveType); |
45 var implementationType = typeRegistration.GetImplementationType(ResolveType) ?? registrationType; | |
45 | 46 |
46 var registrationContext = new TypeRegistrationBuilder( | 47 var registrationContext = new TypeRegistrationBuilder( |
47 m_resolver, | 48 m_resolver, |
48 registrationType, | 49 registrationType, |
49 implementationType | 50 implementationType |
50 ); | 51 ); |
51 | 52 |
52 if (registerElement.Injectors != null) { | 53 typeRegistration.Visit(registrationContext); |
53 foreach (var injector in registerElement.Injectors) { | |
54 injector.Visit(registrationContext); | |
55 } | |
56 } | |
57 | 54 |
58 m_container.RegisterType( | 55 m_container.RegisterType( |
59 registrationContext.RegistrationType, | 56 registrationContext.RegistrationType, |
60 registrationContext.ImplementationType, | 57 registrationContext.ImplementationType, |
61 registerElement.Name, | 58 typeRegistration.Name, |
62 registerElement.Lifetime?.GetLifetimeManager(this), | 59 registrationContext.Lifetime, |
63 registrationContext.Injections | 60 registrationContext.Injections |
64 ); | 61 ); |
65 } | 62 } |
66 | 63 |
67 internal void Visit(SerializedElement serializedElement) { | 64 internal void Visit(InstanceAbstractRegistration instanceRegistration) { |
68 var registrationType = ResolveType(serializedElement.RegistrationType); | 65 var registrationType = instanceRegistration.GetRegistrationType(ResolveType); |
69 var valueBuilder = new InjectionValueBuilder(m_resolver, null); | |
70 | 66 |
71 valueBuilder.Visit(serializedElement); | 67 var builder = new InstanceRegistrationBuilder(m_resolver, registrationType); |
72 | 68 |
69 instanceRegistration.Visit(builder); | |
70 | |
73 m_container.RegisterInstance( | 71 m_container.RegisterInstance( |
74 registrationType, | 72 builder.ValueBuilder.ValueType, |
75 serializedElement.Name, | 73 instanceRegistration.Name, |
76 valueBuilder.Value, | 74 builder.ValueBuilder.Value, |
77 serializedElement.Lifetime?.GetLifetimeManager(this) | 75 builder.Lifetime |
78 ); | 76 ); |
79 } | 77 } |
80 | 78 |
81 internal void Visit(ValueElement valueElement) { | 79 internal void Visit(FactoryAbstractRegistratrion factoryRgistration) { |
82 var registrationType = ResolveType(valueElement.RegistrationType); | 80 var registrationType = factoryRgistration.GetRegistrationType(ResolveType); |
83 var valueBuilder = new InjectionValueBuilder(m_resolver, null); | |
84 | 81 |
85 valueBuilder.Visit(valueElement); | 82 var builder = new FactoryRegistrationBuilder(registrationType); |
86 | 83 |
87 m_container.RegisterInstance( | 84 factoryRgistration.Visit(builder); |
88 registrationType, | 85 |
89 valueElement.Name, | 86 m_container.RegisterType( |
90 valueBuilder.Value, | 87 builder.RegistrationType, |
91 valueElement.Lifetime?.GetLifetimeManager(this) | 88 factoryRgistration.Name, |
89 builder.Lifetime, | |
90 builder.Factory | |
92 ); | 91 ); |
93 } | 92 } |
94 | 93 |
95 internal void Visit(NamespaceElement namespaceElement) { | 94 internal void Visit(NamespaceElement namespaceElement) { |
96 m_resolver.AddNamespace(namespaceElement.Name); | 95 m_resolver.AddNamespace(namespaceElement.Name); |
109 includeContext.LoadConfig(file); | 108 includeContext.LoadConfig(file); |
110 } | 109 } |
111 | 110 |
112 public void LoadConfig(string file) { | 111 public void LoadConfig(string file) { |
113 var config = m_schema.LoadFile(file); | 112 var config = m_schema.LoadFile(file); |
114 Visit(config); | 113 |
114 config.Visit(this); | |
115 } | 115 } |
116 | 116 |
117 internal void Visit(ContainerElement containerElement) { | |
118 foreach (var item in containerElement.Items) | |
119 item.Visit(this); | |
120 } | |
121 | |
122 | |
123 | |
124 } | 117 } |
125 } | 118 } |