Mercurial > pub > ImplabNet
comparison Implab.ServiceHost/Unity/InjectionValueBuilder.cs @ 278:6691aff01de1 v3
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
Implab.ServiceHost: rewritten TypeReference (added support for nested types), stable API
author | cin |
---|---|
date | Thu, 03 May 2018 09:59:44 +0300 |
parents | 963b17c275be |
children | 8714471e8d78 |
comparison
equal
deleted
inserted
replaced
277:963b17c275be | 278:6691aff01de1 |
---|---|
5 using System.Xml.Serialization; | 5 using System.Xml.Serialization; |
6 using Unity.Injection; | 6 using Unity.Injection; |
7 | 7 |
8 namespace Implab.ServiceHost.Unity { | 8 namespace Implab.ServiceHost.Unity { |
9 | 9 |
10 public class InjectionValueBuilder { | 10 public class InjectionParameterBuilder { |
11 | 11 |
12 readonly TypeResolver m_resolver; | 12 readonly TypeResolver m_resolver; |
13 | 13 |
14 public Type DefaultType { get; private set; } | 14 public Type DefaultType { get; private set; } |
15 | 15 |
24 | 24 |
25 return new InjectionParameter(ValueType, null); | 25 return new InjectionParameter(ValueType, null); |
26 } | 26 } |
27 } | 27 } |
28 | 28 |
29 internal InjectionValueBuilder(TypeResolver resolver, Type defaultType) { | 29 internal InjectionParameterBuilder(TypeResolver resolver, Type defaultType) { |
30 m_resolver = resolver; | 30 m_resolver = resolver; |
31 DefaultType = defaultType; | 31 DefaultType = defaultType; |
32 } | 32 } |
33 | 33 |
34 public Type ResolveInjectedValueType(string typeSpec) { | 34 public Type ResolveInjectedValueType(string typeSpec) { |
35 if (string.IsNullOrEmpty(typeSpec)) { | 35 if (string.IsNullOrEmpty(typeSpec)) { |
36 if (DefaultType == null) | 36 if (DefaultType == null) |
37 throw new Exception("The type must be specified"); | 37 throw new Exception("The type must be specified"); |
38 return DefaultType; | 38 return DefaultType; |
39 } | 39 } |
40 return m_resolver.Resolve(typeSpec); | 40 return m_resolver.Resolve(typeSpec, true); |
41 } | 41 } |
42 | 42 |
43 public Type ResolveType(string typeSpec) { | 43 public Type ResolveType(string typeSpec) { |
44 return m_resolver.Resolve(typeSpec); | 44 return m_resolver.Resolve(typeSpec, true); |
45 } | 45 } |
46 | 46 |
47 public void SetValue(Type type, object value) { | 47 public void SetValue(Type type, object value) { |
48 ValueType = type; | 48 ValueType = type; |
49 Value = value; | 49 Value = value; |
73 if (itemsType == null) | 73 if (itemsType == null) |
74 throw new Exception("Failed to determine array elements type"); | 74 throw new Exception("Failed to determine array elements type"); |
75 | 75 |
76 InjectionParameterValue[] injections = (arrayParameter.Items ?? new InjectionParameterElement[0]) | 76 InjectionParameterValue[] injections = (arrayParameter.Items ?? new InjectionParameterElement[0]) |
77 .Select(x => { | 77 .Select(x => { |
78 var builder = new InjectionValueBuilder(m_resolver, itemsType); | 78 var builder = new InjectionParameterBuilder(m_resolver, itemsType); |
79 x.Visit(builder); | 79 x.Visit(builder); |
80 return builder.Injection; | 80 return builder.Injection; |
81 }) | 81 }) |
82 .ToArray(); | 82 .ToArray(); |
83 | 83 |
84 var array = itemsType.IsGenericParameter ? (object)new GenericResolvedArrayParameter(itemsType.Name, injections) : new ResolvedArrayParameter(itemsType, injections); | 84 var array = itemsType.IsGenericParameter ? |
85 (object)new GenericResolvedArrayParameter(itemsType.Name, injections) : | |
86 new ResolvedArrayParameter(itemsType, injections); | |
87 | |
85 ValueType = arrayType; | 88 ValueType = arrayType; |
86 Value = array; | 89 Value = array; |
87 } | 90 } |
88 } | 91 } |
89 } | 92 } |