Add DI support to command Groupspull/219/head
@@ -108,19 +108,19 @@ namespace Discord.Commands | |||||
if (moduleAttr == null) | if (moduleAttr == null) | ||||
throw new ArgumentException($"Modules must be marked with ModuleAttribute."); | throw new ArgumentException($"Modules must be marked with ModuleAttribute."); | ||||
return LoadInternal(moduleInstance, moduleAttr, typeInfo); | |||||
return LoadInternal(moduleInstance, moduleAttr, typeInfo, null); | |||||
} | } | ||||
finally | finally | ||||
{ | { | ||||
_moduleLock.Release(); | _moduleLock.Release(); | ||||
} | } | ||||
} | } | ||||
private Module LoadInternal(object moduleInstance, ModuleAttribute moduleAttr, TypeInfo typeInfo) | |||||
private Module LoadInternal(object moduleInstance, ModuleAttribute moduleAttr, TypeInfo typeInfo, IDependencyMap dependencyMap) | |||||
{ | { | ||||
if (_modules.ContainsKey(moduleInstance.GetType())) | if (_modules.ContainsKey(moduleInstance.GetType())) | ||||
return _modules[moduleInstance.GetType()]; | return _modules[moduleInstance.GetType()]; | ||||
var loadedModule = new Module(typeInfo, this, moduleInstance, moduleAttr); | |||||
var loadedModule = new Module(typeInfo, this, moduleInstance, moduleAttr, dependencyMap); | |||||
_modules[moduleInstance.GetType()] = loadedModule; | _modules[moduleInstance.GetType()] = loadedModule; | ||||
foreach (var cmd in loadedModule.Commands) | foreach (var cmd in loadedModule.Commands) | ||||
@@ -141,7 +141,7 @@ namespace Discord.Commands | |||||
if (moduleAttr != null && moduleAttr.AutoLoad) | if (moduleAttr != null && moduleAttr.AutoLoad) | ||||
{ | { | ||||
var moduleInstance = ReflectionUtils.CreateObject(typeInfo, this, dependencyMap); | var moduleInstance = ReflectionUtils.CreateObject(typeInfo, this, dependencyMap); | ||||
modules.Add(LoadInternal(moduleInstance, moduleAttr, typeInfo)); | |||||
modules.Add(LoadInternal(moduleInstance, moduleAttr, typeInfo, dependencyMap)); | |||||
} | } | ||||
} | } | ||||
return modules.ToImmutable(); | return modules.ToImmutable(); | ||||
@@ -19,7 +19,7 @@ namespace Discord.Commands | |||||
public IReadOnlyList<PreconditionAttribute> Preconditions { get; } | public IReadOnlyList<PreconditionAttribute> Preconditions { get; } | ||||
internal Module(TypeInfo source, CommandService service, object instance, ModuleAttribute moduleAttr) | |||||
internal Module(TypeInfo source, CommandService service, object instance, ModuleAttribute moduleAttr, IDependencyMap dependencyMap) | |||||
{ | { | ||||
Source = source; | Source = source; | ||||
Service = service; | Service = service; | ||||
@@ -40,13 +40,13 @@ namespace Discord.Commands | |||||
Description = descriptionAttr.Text; | Description = descriptionAttr.Text; | ||||
List<Command> commands = new List<Command>(); | List<Command> commands = new List<Command>(); | ||||
SearchClass(source, instance, commands, Prefix); | |||||
SearchClass(source, instance, commands, Prefix, dependencyMap); | |||||
Commands = commands; | Commands = commands; | ||||
Preconditions = BuildPreconditions(); | Preconditions = BuildPreconditions(); | ||||
} | } | ||||
private void SearchClass(TypeInfo parentType, object instance, List<Command> commands, string groupPrefix) | |||||
private void SearchClass(TypeInfo parentType, object instance, List<Command> commands, string groupPrefix, IDependencyMap dependencyMap) | |||||
{ | { | ||||
if (groupPrefix != "") | if (groupPrefix != "") | ||||
groupPrefix += " "; | groupPrefix += " "; | ||||
@@ -66,7 +66,7 @@ namespace Discord.Commands | |||||
nextGroupPrefix = groupPrefix + groupAttrib.Prefix ?? type.Name; | nextGroupPrefix = groupPrefix + groupAttrib.Prefix ?? type.Name; | ||||
else | else | ||||
nextGroupPrefix = groupPrefix; | nextGroupPrefix = groupPrefix; | ||||
SearchClass(type, ReflectionUtils.CreateObject(type, Service), commands, nextGroupPrefix); | |||||
SearchClass(type, ReflectionUtils.CreateObject(type, Service, dependencyMap), commands, nextGroupPrefix, dependencyMap); | |||||
} | } | ||||
} | } | ||||
} | } | ||||