Cleaned up bugs in DependencyMap and ReflectionUtils

This commit is contained in:
Christopher F
2016-07-20 18:04:18 -04:00
parent bbe51012cf
commit e266fa8b32
2 changed files with 12 additions and 7 deletions

View File

@@ -8,6 +8,11 @@ namespace Discord.Commands
{
private Dictionary<Type, object> map;
public DependencyMap()
{
map = new Dictionary<Type, object>();
}
public T Get<T>() where T : class
{
var t = typeof(T);

View File

@@ -16,23 +16,23 @@ namespace Discord.Commands
if (constructor.GetParameters().Length == 0)
return constructor.Invoke(null);
else if (constructor.GetParameters().Length > 1)
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\"");
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\" (Found too many parameters)");
var parameter = constructor.GetParameters().FirstOrDefault();
if (parameter == null)
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\"");
if (parameter.GetType() == typeof(CommandService))
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\" (No valid parameters)");
if (parameter.ParameterType == typeof(CommandService))
return constructor.Invoke(new object[1] { commands });
else if (parameter is IDependencyMap)
else if (parameter.ParameterType == typeof(IDependencyMap))
{
if (map == null) throw new InvalidOperationException($"The constructor for \"{typeInfo.FullName}\" requires a Dependency Map.");
return constructor.Invoke(new object[1] { map });
}
else
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\"");
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\" (Invalid Parameter Type: \"{parameter.ParameterType.FullName}\")");
}
catch
catch (Exception e)
{
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\"");
throw new InvalidOperationException($"Could not find a valid constructor for \"{typeInfo.FullName}\" (Error invoking constructor)");
}
}
}