Это может быть слишком много для ваших нужд, но я думаю, что надежный и гибкий способ сделать это - создать пару атрибутов метаданных для украшения классов, которые вы, возможно, захотите вызывать из вашей оболочки, что-то вроде:
[ScriptableClass]
public class MyClass
{
[ScriptableMethod(typeof (Destination),typeof(int))]
public void Run (Destination f, int distance) {}
}
Затем во время запуска вашей оболочки вы загружаете свои сборки с помощью отражения и ищите типы, отмеченные атрибутом ScriptableClass . Для каждого из них вы проверяете их общедоступные методы на предмет поиска тех, которые помечены атрибутом ScriptableMethod , и вы можете создать словарь классов и их методы для работы с сценариями (вместе с информацией о параметрах). Для предыдущего примера у вас будет команда «MyClass.Run», которую вы можете использовать из оболочки. При получении ваш механизм сценариев создаст / выполнит поиск экземпляра класса и выполнит метод.
Преимущество этого метода заключается в том, что вам не нужно будет изменять ваш движок сценариев каждый раз, когда вы добавляете новые классы или модифицируете методы.