implement multiple expotd
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user