C # не поддерживает статические интерфейсы, поэтому вы не можете определить метод статического компоновщика, как
public interface ICommand
{
static ICommand CreateCommand(string command);
}
Я согласен с Кевином, что вам нужен шаблон Фабрики. Я сделаю еще один шаг и скажу, что вам нужен компоновщик для каждого типа команды. Как это
public interface ICommandBuilder
{
bool CanParse(string input);
ICommand Build(string input);
}
public interface ICommandBuilder<TCommand> : ICommandBuilder
where TCommand : ICommand
{
TCommand Build(string input);
}
Тогда ваша фабрика может принять любую входную командную строку, запросить все сборщики, могут ли они проанализировать эту строку, и запустить Build на той, которая может.
public interface ICommandFactory
{
ICommand Build(string input);
}
public class CommandFactory
{
public ICommand Build(string input)
{
var builder = container.ResolveAll(typeof(ICommandBuilder))
.First(x => x.CanParse(input));
return builder.Build(input);
}
}