2016-02-04 5 views
1

Я пытаюсь получить доступ к библиотеке Microsoft.SignalR из Python для .Net в Visual Studio и некоторые из реализации хаба (IHubProxy) в продолжении: HubProxyExtensionsPython для расширений .Net и C# - клиент SignalR в Python (по методу не работает)

Python для .Net, кажется, не покрывают расширения в риом, и я не могу найти какие-либо ссылки (мой Google-фу не работают в данном случае)

я. 'm можно загрузить класс расширений напрямую, но вызов метода не выполняется:

ext = SignalR.Client.HubProxyExtensions 
ext.On(self._proxy, method, handle) 

Нагрузка удлинительного класса и отчеты, как мета-класс и имеют методы из окна немедленного

ext 
<CLR Metatype> 
dir(ext) 
['Equals', 'Finalize', 'GetHashCode', 'GetType', 'GetValue', MemberwiseClone', 'Observe', 'On', 'Overloads', 'ReferenceEquals', 'ToString', __call__', '__class__', '__cmp__', ...] 

Вызова ext.On() сбоя процесса.

Поддерживает ли Python расширение .Net? (Или это просто проблема в конкретную эту конкретную реализацию)


Обновление: Ведение простого теста на расширениях, это выглядит как Python для .Net делает обрабатывать расширения должным образом, так что есть что-то не так с моим вызовом Signalr специально ... больше испытаний.

ответ

1

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


шаблоны действий:

Проблема в моем случае нет никакого способа связать шаблоны действий в Python для .NET. Таким образом, нет способа вызвать правильные методы On в хабе.

Someone else found the same issue recently


Расширения:

Python для .Net можно вызывать методы расширения; Просто вызовите статический метод расширения через класс расширения, как и любые другие методы статического класса.

C#

namespace ExtensionTest 
{ 
    public class MyClass 
    { 
     public string MyMethod(string something) 
     { 
      System.Console.Out.WriteLine(string.Format("Hi! This is something! {0}", something)); 
      return something + " something else"; 
     } 
    } 
} 

namespace ExtensionTest 
{ 
    public static class MyExtension 
    { 
     public static string MyExtensionMethod(this MyClass myclass, string something) 
     { 
      System.Console.Out.WriteLine(string.Format("This is the extension {0}", something)); 
      string somethingelse = myclass.MyMethod(something); 
      return somethingelse + " more of something"; 
     } 
    } 
} 

Python:

import clr 
clr.AddReference('ExtensionTest') 
import ExtensionTest 
obj = ExtensionTest.MyClass() 
s = obj.MyMethod('Hi') 
print s 
s = ExtensionTest.MyExtension.MyExtensionMethod(obj, 'Hello!') 

Выход:

Hi! This is something! Hi 
Hi something else 
This is the extension Hello! 
Hi! This is something! Hello! 
Hello! something else more of something 

Я не знаю, почему это не упоминается в ридми для питона для .net.

Я предполагаю, что это очевидные :)

+0

тянуть запросы радушны к pythonnet документации :) – denfromufa

 Смежные вопросы

  • Нет связанных вопросов^_^