diff --git a/src/Discord.Net.Commands/Dependencies/DependencyMap.cs b/src/Discord.Net.Commands/Dependencies/DependencyMap.cs index f5adf1a8c..7fb8d33c9 100644 --- a/src/Discord.Net.Commands/Dependencies/DependencyMap.cs +++ b/src/Discord.Net.Commands/Dependencies/DependencyMap.cs @@ -38,6 +38,10 @@ namespace Discord.Commands public void AddFactory(Func factory) where T : class { var t = typeof(T); + if (typeof(T) == typeof(IDependencyMap)) + throw new InvalidOperationException("IDependencyMap is used internally and cannot be added as a dependency"); + if (typeof(T) == typeof(CommandService)) + throw new InvalidOperationException("CommandService is used internally and cannot be added as a dependency"); if (map.ContainsKey(t)) throw new InvalidOperationException($"The dependency map already contains \"{t.FullName}\""); map.Add(t, factory); @@ -48,6 +52,10 @@ namespace Discord.Commands var t = typeof(T); if (map.ContainsKey(t)) return false; + if (typeof(T) == typeof(IDependencyMap)) + throw new InvalidOperationException("IDependencyMap is used internally and cannot be added as a dependency"); + if (typeof(T) == typeof(CommandService)) + throw new InvalidOperationException("CommandService is used internally and cannot be added as a dependency"); map.Add(t, factory); return true; } diff --git a/src/Discord.Net.Commands/Utilities/ReflectionUtils.cs b/src/Discord.Net.Commands/Utilities/ReflectionUtils.cs index 1333b9640..2eaa6a882 100644 --- a/src/Discord.Net.Commands/Utilities/ReflectionUtils.cs +++ b/src/Discord.Net.Commands/Utilities/ReflectionUtils.cs @@ -51,6 +51,8 @@ namespace Discord.Commands }; } + private static readonly TypeInfo _dependencyTypeInfo = typeof(IDependencyMap).GetTypeInfo(); + internal static object GetMember(Type targetType, IDependencyMap map, CommandService service, TypeInfo baseType) { object arg; @@ -58,7 +60,7 @@ namespace Discord.Commands { if (targetType == typeof(CommandService)) arg = service; - else if (targetType == typeof(IDependencyMap)) + else if (targetType == typeof(IDependencyMap) || targetType == map.GetType()) arg = map; else throw new InvalidOperationException($"Failed to create \"{baseType.FullName}\", dependency \"{targetType.Name}\" was not found.");