Jak refaktoryzować Przełącz na Słownik / Fabryka

Próbuję uruchomić 'Recipe' odczytany z pliku tekstowego i przeanalizowany wiersz po wierszu, aby dynamicznie wywołać szereg metod. Myślę, że muszę zaimplementować fabrykę po zrobieniu trochę gogli, ale brakuje mi pewnych kluczowych szczegółów. Oto najbliższy przykład:

http://simpleprogrammer.com/2010/08/17/pulling-out-the-switch-its-time-for-a-whooping/

Poniższy kod jest fragmentem tego, co ma teraz.

    internal static void Run(int Thread_ID, List<StringBuilder> InstructionSet, List<double>[] Waveforms)
    {
        //Init
        List<double>[] Register = new List<double>[10];
        for (int i = 0; i < Waveforms.Length; i++) { Register[i] = new List<double>(Waveforms[i]); }
        for (int i = 0; i < Register.Length; i++) { if (Register[i] == null) { Register[i] = new List<double>(); } }

        //Run Recipe Steps
        foreach (var item in InstructionSet)
        {
            Step Op = Step.Parse(item.ToString());
            switch (Op.TaskName)
            {
                case "SimpleMovingAverage":
                    Register[Convert.ToInt32(Op.Args[0])] = Signal_Filters.SimpleMovingAverage(Register[Convert.ToInt32(Op.Args[1])], Convert.ToInt32(Op.Args[2]));
                    break;

                case "RollingSteppedStdDeviation":
                    Register[Convert.ToInt32(Op.Args[0])] = Signal_Filters.RollingSteppedStdDeviation(Register[Convert.ToInt32(Op.Args[1])], Convert.ToInt32(Op.Args[2]), Convert.ToInt32(Op.Args[3]));
                    break;

               //... etc. many, many methods to be called.
            }
        }
    }

... i poniżej znajduje się część przykładu, na którą mam pytania dotyczące:

public static class MoveFactory
{
    private static Dictionary<string, Func<IMove>> moveMap = new Dictionary<string, Func<IMove>>()
    {
        {"Up", () => { return new UpMove(); }},
        {"Down", () => { return new DownMove(); }},
        {"Left", () => { return new LeftMove(); }}
        // ...
    };

    public static IMove CreateMoveFromName(string name)
    {
        return moveMap[name]();
    }
}

Czy mogę automatycznie wygenerować listę słowników? Tak więc za każdym razem, gdy dodam nową klasę, która implementuje mój interfejs Factory (mój odpowiednik IMove), nie muszę aktualizować mojego słownika ani prawie żadnej innej części mojego kodu. Może to może być wymuszone jako część interfejsu?

W powyższym przykładowym kodzie nie widzę, aby przekazywał argumenty do i z zewnątrz. Patrząc na mój kod, mam dane potrzebne do stopniowej mutacji ... Jak mam to zrobić przy użyciu fabryki.

Fabryka musi być bezpieczna dla wątków, ponieważ chcę przekazać różne dane początkowe wielu pracownikom, z których każdy ma własną recepturę.

questionAnswers(1)

yourAnswerToTheQuestion