Feliceの回答を拡大するには、私が受け入れた答えに基づいて解決策を投稿すると便利だと思いました。
現在、私のコマンドはIDictionary<TKey,TValue>
でマップされていますが、間もなく別のメディア(XML、JSONなど)に移動されます。
ここで私は、ユーザー入力のためのcompnentsを登録しています方法ですが、コマンド:
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
};
}
は、なぜあなたは代わりに、最初の場所でActivator.CreateInstanceを使用してのウィンザーでオブジェクトを解決しませんか? –
私は今やっています。私の現在の養成については私の答えを見てください。 –