Browse Source

Add DI support to command Groups

tags/1.0-rc
FiniteReality 8 years ago
parent
commit
610a3a26ab
2 changed files with 8 additions and 8 deletions
  1. +4
    -4
      src/Discord.Net.Commands/CommandService.cs
  2. +4
    -4
      src/Discord.Net.Commands/Module.cs

+ 4
- 4
src/Discord.Net.Commands/CommandService.cs View File

@@ -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();


+ 4
- 4
src/Discord.Net.Commands/Module.cs View File

@@ -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);
} }
} }
} }


Loading…
Cancel
Save