Mercurial > pub > ImplabNet
diff 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 |
line wrap: on
line diff
--- a/Implab.ServiceHost/Unity/ContainerBuilder.cs Sat Apr 28 00:11:38 2018 +0300 +++ b/Implab.ServiceHost/Unity/ContainerBuilder.cs Sat Apr 28 18:48:09 2018 +0300 @@ -39,9 +39,10 @@ return m_resolver.Resolve(typeReference); } - internal void Visit(RegisterElement registerElement) { - var registrationType = ResolveType(registerElement.RegistrationType); - var implementationType = string.IsNullOrEmpty(registerElement.MapToType) ? registrationType : ResolveType(registerElement.MapToType); + + internal void Visit(TypeAbstractRegistration typeRegistration) { + var registrationType = typeRegistration.GetRegistrationType(ResolveType); + var implementationType = typeRegistration.GetImplementationType(ResolveType) ?? registrationType; var registrationContext = new TypeRegistrationBuilder( m_resolver, @@ -49,46 +50,44 @@ implementationType ); - if (registerElement.Injectors != null) { - foreach (var injector in registerElement.Injectors) { - injector.Visit(registrationContext); - } - } + typeRegistration.Visit(registrationContext); m_container.RegisterType( registrationContext.RegistrationType, registrationContext.ImplementationType, - registerElement.Name, - registerElement.Lifetime?.GetLifetimeManager(this), + typeRegistration.Name, + registrationContext.Lifetime, registrationContext.Injections ); } - internal void Visit(SerializedElement serializedElement) { - var registrationType = ResolveType(serializedElement.RegistrationType); - var valueBuilder = new InjectionValueBuilder(m_resolver, null); + internal void Visit(InstanceAbstractRegistration instanceRegistration) { + var registrationType = instanceRegistration.GetRegistrationType(ResolveType); + + var builder = new InstanceRegistrationBuilder(m_resolver, registrationType); - valueBuilder.Visit(serializedElement); - + instanceRegistration.Visit(builder); + m_container.RegisterInstance( - registrationType, - serializedElement.Name, - valueBuilder.Value, - serializedElement.Lifetime?.GetLifetimeManager(this) + builder.ValueBuilder.ValueType, + instanceRegistration.Name, + builder.ValueBuilder.Value, + builder.Lifetime ); } - internal void Visit(ValueElement valueElement) { - var registrationType = ResolveType(valueElement.RegistrationType); - var valueBuilder = new InjectionValueBuilder(m_resolver, null); + internal void Visit(FactoryAbstractRegistratrion factoryRgistration) { + var registrationType = factoryRgistration.GetRegistrationType(ResolveType); + + var builder = new FactoryRegistrationBuilder(registrationType); - valueBuilder.Visit(valueElement); - - m_container.RegisterInstance( - registrationType, - valueElement.Name, - valueBuilder.Value, - valueElement.Lifetime?.GetLifetimeManager(this) + factoryRgistration.Visit(builder); + + m_container.RegisterType( + builder.RegistrationType, + factoryRgistration.Name, + builder.Lifetime, + builder.Factory ); } @@ -111,15 +110,9 @@ public void LoadConfig(string file) { var config = m_schema.LoadFile(file); - Visit(config); + + config.Visit(this); } - - internal void Visit(ContainerElement containerElement) { - foreach (var item in containerElement.Items) - item.Visit(this); - } - - - + } } \ No newline at end of file