Merge pull request #308 from Joe4evr/AutoLoadFix

Exclude abstract types from being loaded as modules.
This commit is contained in:
RogueException
2016-10-15 14:29:24 -03:00
committed by GitHub

View File

@@ -70,13 +70,16 @@ namespace Discord.Commands
await _moduleLock.WaitAsync().ConfigureAwait(false); await _moduleLock.WaitAsync().ConfigureAwait(false);
try try
{ {
if (_moduleDefs.ContainsKey(typeof(T)))
throw new ArgumentException($"This module has already been added.");
var typeInfo = typeof(T).GetTypeInfo(); var typeInfo = typeof(T).GetTypeInfo();
if (!_moduleTypeInfo.IsAssignableFrom(typeInfo)) if (!_moduleTypeInfo.IsAssignableFrom(typeInfo))
throw new ArgumentException($"Modules must inherit ModuleBase."); throw new ArgumentException($"Modules must inherit ModuleBase.");
if (typeInfo.IsAbstract)
throw new InvalidOperationException("Modules must not be abstract.");
if (_moduleDefs.ContainsKey(typeof(T)))
throw new ArgumentException($"This module has already been added.");
return AddModuleInternal(typeInfo, dependencyMap); return AddModuleInternal(typeInfo, dependencyMap);
} }
finally finally
@@ -98,7 +101,7 @@ namespace Discord.Commands
if (_moduleTypeInfo.IsAssignableFrom(typeInfo)) if (_moduleTypeInfo.IsAssignableFrom(typeInfo))
{ {
var dontAutoLoad = typeInfo.GetCustomAttribute<DontAutoLoadAttribute>(); var dontAutoLoad = typeInfo.GetCustomAttribute<DontAutoLoadAttribute>();
if (dontAutoLoad == null) if (dontAutoLoad == null && !typeInfo.IsAbstract)
moduleDefs.Add(AddModuleInternal(typeInfo, dependencyMap)); moduleDefs.Add(AddModuleInternal(typeInfo, dependencyMap));
} }
} }