Add DI support to command Groupstags/1.0-rc
| @@ -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); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||