##// END OF EJS Templates
Fixed promise rejection when there is not specified error handler in the reaction....
Fixed promise rejection when there is not specified error handler in the reaction. FIXED SPELLING IN THE XML CONTAINER CONFIGURATION signleton->singleton Code cleanup Update tests make them working on dotnet core

File last commit:

r289:95896f882995 v3.0.14 v3
r295:28af686e24f7 default
Show More
TypeRegistrationBuilder.cs
80 lines | 3.1 KiB | text/x-csharp | CSharpLexer
/ Implab.ServiceHost / src / Unity / TypeRegistrationBuilder.cs
cin
Added tests for Implab.ServiceHost.Unity configuration loader.
r289 using System;
using System.Collections.Generic;
using System.Linq;
using Unity.Injection;
using Unity.Registration;
namespace Implab.ServiceHost.Unity {
public class TypeRegistrationBuilder : RegistrationBuilder {
readonly TypeResolver m_resolver;
readonly List<InjectionMember> m_injections = new List<InjectionMember>();
internal InjectionMember[] Injections { get { return m_injections.ToArray(); } }
public Type ImplementationType {
get;
private set;
}
internal TypeRegistrationBuilder(TypeResolver resolver, Type registrationType, Type implementationType, ContainerBuilder root) : base(registrationType, root) {
ImplementationType = implementationType;
// when registering a generic mapping, register all generic parameter names as local types
if (ImplementationType.IsGenericTypeDefinition) {
m_resolver = new TypeResolver(resolver);
foreach (var p in ImplementationType.GetGenericArguments())
m_resolver.AddMapping(p.Name, p);
} else {
m_resolver = resolver;
}
}
internal void Visit(ConstructorInjectionElement constructorInjection) {
var parameters = constructorInjection.Parameters?
.Select(x => {
var valueBuilder = new InjectionParameterBuilder(m_resolver, null, Root);
x.Visit(valueBuilder);
return valueBuilder.Injection;
})
.ToArray();
var injection = parameters != null ? new InjectionConstructor(parameters) : new InjectionConstructor();
m_injections.Add(injection);
}
internal void Visit(MethodInjectionElement methodInjection) {
var parameters = methodInjection.Parameters?
.Select(x => {
var valueBuilder = new InjectionParameterBuilder(m_resolver, null, Root);
x.Visit(valueBuilder);
return valueBuilder.Injection;
})
.ToArray();
var injection = parameters != null ? new InjectionMethod(methodInjection.Name, parameters) : new InjectionMethod(methodInjection.Name);
m_injections.Add(injection);
}
internal void Visit(PropertyInjectionElement propertyInjection) {
if (propertyInjection.Value == null)
throw new Exception($"A value value must be specified for the property '{propertyInjection.Name}'");
var propertyType = ImplementationType.GetProperty(propertyInjection.Name)?.PropertyType;
var valueContext = new InjectionParameterBuilder(m_resolver, propertyType, Root);
propertyInjection.Value.Visit(valueContext);
var injection = new InjectionProperty(propertyInjection.Name, valueContext.Injection);
m_injections.Add(injection);
}
public void AddInjectionMember(InjectionMember injection) {
Safe.ArgumentNotNull(injection, nameof(injection));
m_injections.Add(injection);
}
}
}