Pergunta

Eu estou hospedando IronPython 2.0 em um aplicativo C # / WinForms. Gostaria Python para acessar a vários objetos globais, estáticos no aplicativo host.

Como exemplo, o aplicativo host tem uma classe interna estática 'global', que contém um número de membros públicos estáticos, que são são os vários objetos globais que eu gostaria de acesso:

static class Global
{
  public static FeederSystem Feed ...
  public static LightingSystem Lighting ...
  public static IOSystem Io ...
  ... etc
}

Eu quero ser capaz de se referir a Global.Lighting.xxx em código Python, assim como eu posso na aplicação C #.

Existe um equivalente IronPythonic de 'InternalsVisibleTo', que eu possa usar para permitir que o código Python para ver os tipos internos do aplicativo host? Ou eu preciso para torná-los todos os públicos?

Foi útil?

Solução

Ok, então eu trabalhei isso mesmo, com a ajuda da especificação DLR, a partir daqui https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf e, olhando para o IP de origem / DLR.

Isto não é muito elegante, e usando um objeto ScriptRuntimeSetup com o conjunto de propriedades PrivateBinding verdadeira provavelmente seria uma rota mais puro do que usando CreateEngine.

Mas este obras:

Dictionary<string, object> options = new Dictionary<string, object>();
options.Add("PrivateBinding", true);

_engine = Python.CreateEngine(options);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top