Нет общего способа сделать это, потому что на уровне DLR не требуется обязательное соглашение о вызовах для языков. Но с IronPython и IronRuby мы будем заполнять некоторые магические параметры. Для IronPython это CodeContext, и для IronRuby я считаю, что это RubyContext. Но это означает, что теперь вы будете напрямую влиять на языковые реализации.
Также нет способа вернуться к ScriptRuntime. ScriptRuntime предназначен для удаленного использования и предоставляет API, который полностью удален. Он поддерживается классом ScriptDomainManager, который обладает всеми функциональными возможностями, которые вы ожидаете найти в ScriptRuntime. И языки никогда не получают поддержку ScriptRuntime (или других API, поддерживающих удаленное взаимодействие), поэтому они всегда работают локально в своем собственном домене приложений. Но вы, как правило, обнаружите, что SDM так же полезен.
Так что вы просто сделать:
public class Foo {
public void Bar(CodeContext context) {
context.LanguageContext.DomainManager.GetLanguageByName("IronRuby");
}
}
Если вы хотите API быть отозваны на других языках вы хотите добавить перегрузку, которая не принимает CodeContext.
Почему? Что вы будете делать по-другому при вызове из ScriptingRuntime vs из другой управляемой dll? –
Почему бы и нет? Вопрос возник ко мне сегодня, и, немного подумав об этом, должно быть средство, чтобы получить дескриптор текущей среды выполнения. Это вопрос любопытства. – Amy