Merge pull request #213 from FiniteReality/issue/212
Add DI support to command Groups
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user