IronPython: как запустить код инициализации при импорте модуля с помощью clr.AddReference ()? - PullRequest
0 голосов
/ 24 сентября 2010

Мне было интересно, можно ли было запустить код инициализации при импорте сборки .NET с помощью clr.AddReference () так же, как при импорте файла python выполняется init .py код, который находится в том же каталоге.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Насколько я знаю, это невозможно с clr.AddReference.

Если ваша сборка имеет модуль IronPython, вы можете запускать код при его импорте (например, __init__.py).Модуль IronPython довольно прост в настройке:

[assembly: PythonModule("mymodule", typeof(MyModule))]
public static class MyModule
{
    [SpecialName]
    public static void PerformModuleReload(PythonContext/*!*/ context, PythonDictionary/*!*/ dict) {
        // module initialization code
    }

    // variables, functions, classes, etc. that appear in the module
}

Не смущайтесь частью перезаписи имени;он вызывается при загрузке модуля, а также при каждой перезагрузке.

Если ваша сборка будет использоваться за пределами IronPython, вы можете поместить этот модуль в отдельную сборку, которая ссылается на ваш оригинальный модуль.Если вам нужны примеры написания модулей, проверьте исходный код проекта IronPython.Modules на http://ironpython.codeplex.com.

1 голос
/ 27 сентября 2010

Это невозможно.

Единственный способ - изменить метод clr.AddReference. Поскольку IronPython является открытым исходным кодом, это должно быть легко.

...