Чтобы расширить ответ, данный Феличе, я подумал, что было бы полезно опубликовать решение, к которому я пришел, основываясь на принятом ответе.
В настоящее время мои команды отображаются через IDictionary<TKey,TValue>
, но скоро будут перемещены на другой носитель (XML, JSON и т. Д.).
Вот как я регистрирую компоненты для пользовательских команд ввода:
public void InstallUserCommands(IWindsorContainer container)
{
var commandToClassMappings = new Dictionary<string, string>
{
{"move", "MoveCommand"},
{"locate","LocateSelfCommand"},
{"lookaround","LookAroundCommand"},
{"bag","LookInBagCommand"}
};
foreach (var command in commandToClassMappings)
{
var commandType = Type.GetType("TheGrid.Commands.UserInputCommands." + command.Value);
container.Register(Component.For(commandType).Named(command.Key));
}
}
и для разрешения экземпляра:
public UserCommandInputMapperResponse Invoke(UserCommandInputMapperRequest request)
{
var container = new WindsorContainer();
container.Install(FromAssembly.This());
IUserInputCommand instance;
try
{
instance = container.Resolve<IUserInputCommand>(request.CommandName.ToLower().Trim());
}
catch (Exception)
{
instance = null;
}
return new UserCommandInputMapperResponse
{
CommandInstance = instance
};
}