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 和 C# 扩展 - Python 中的 SignalR 客户端(On 方法不起作用)

所以我要回答我自己的问题,因为它被证明是多个问题; 我没有看到其他人直接解决这个问题。


操作模板

就我而言,问题是无法在 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 自述文件中没有提到这一点。

我想这很明显:)