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 } |
