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