Python for .Net 和 C# 扩展 - Python 中的 SignalR 客户端(On 方法不起作用)
本文关键字:Python 客户端 On 方法 不起作用 SignalR 中的 Net for 扩展 | 更新日期: 2023-09-27 18:33:11
我正在尝试在Visual Studio中从Python for .Net访问Microsoft.SignalR库,并且Hub(IHubProxy)的一些实现在扩展中:HubProxyExtensions
Python for .Net 似乎没有涵盖自述文件中的扩展名,我找不到任何参考(在这种情况下,我的谷歌 fu 不起作用。
我可以直接加载扩展类,但调用该方法失败:
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 for .Net 是否支持扩展? (或者它只是特定于此特定实现的问题)
更新:对扩展进行简单的测试,看起来 Python for .Net 确实可以正确处理扩展,所以我对 Signalr 的调用特别有问题......更多测试即将到来。
所以我要回答我自己的问题,因为它被证明是多个问题; 我没有看到其他人直接解决这个问题。
操作模板:
就我而言,问题是无法在 Python for .Net 中绑定操作模板。 因此,无法在集线器中调用正确的 On 方法。
其他人最近发现了同样的问题
扩展:
Python for .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";
}
}
}
蟒:
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 的 python 自述文件中没有提到这一点。
我想这很明显:)