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 }