implement multiple expotd

This commit is contained in:
2019-07-29 00:21:09 +02:00
parent db8cb3e289
commit 56691b3145
14 changed files with 86 additions and 24 deletions

View File

@ -1,5 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace SmallInjector
@ -15,7 +17,7 @@ namespace SmallInjector
public void RegisterType<TService, TInterface>(bool isSingleton, TService instance = default)
where TService : TInterface
{
if (!IsRegistered<TService>())
if (!IsRegistered<TInterface>())
{
_container[typeof(TInterface)] = new List<RegisteredType>
{new RegisteredType(typeof(TService), isSingleton, null)};
@ -43,7 +45,7 @@ namespace SmallInjector
public IEnumerable<object> ResolveAny(Type serviceType)
{
if (!_container.TryGetValue(serviceType, out var registeredTypes))
throw new Exception(@"Dependency {serviceType} is not registered");
throw new Exception($"Dependency {serviceType.FullName} is not registered");
foreach (var registeredType in registeredTypes)
{
if (registeredType.IsSingleton && registeredType.Instance != null)
@ -57,7 +59,15 @@ namespace SmallInjector
var constructorParameters = new object[parameters.Length];
for (var i = 0; i < parameters.Length; i++)
{
constructorParameters[i] = Resolve(parameters[i].ParameterType);
var parameterType = parameters[i].ParameterType;
if (typeof(Array).IsAssignableFrom(parameterType))
{
constructorParameters[i] = ResolveAny(parameterType.GetElementType()).ToArray();
}
else
{
constructorParameters[i] = Resolve(parameters[i].ParameterType);
}
}
var instance = constructor.Invoke(constructorParameters);
@ -83,6 +93,8 @@ namespace SmallInjector
IsSingleton = isSingleton;
Instance = instance;
}
public override string ToString() => ServiceType.ToString();
}
}
}