我有一段代码有些丑陋,因为我必须使用反射来使其工作。我忍不住想知道是否有更好/更干净的方法来实现相同的目标。
情况如下:我的代码订阅了事件存储。每次事件存储记录新事件时,都会执行我的方法i=poly([1,1,1],1)
。此时,我将Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
i = poly([1,1,1],1)
File "C:\Python\numInt.py", line 76, in __init__
self.coeffs = coeffs
File "C:\Python\numInt.py", line 88, in coeffs
self.coeffs= new_coeffs
File "C:\Python\numInt.py", line 88, in coeffs
self.coeffs= new_coeffs
File "C:\Python\numInt.py", line 88, in coeffs
self.coeffs= new_coeffs
[Previous line repeated 989 more times]
RecursionError: maximum recursion depth exceeded
映射(反序列化)为其原始In [162]: df['group'] = 'group' + (df.groupby('name', sort=False).ngroup()+1).astype(str)
In [163]: df
Out[163]:
name color group
0 car white group1
1 car black group1
2 car red group1
3 bus white group2
4 bus black group2
5 bus red group2
,并使用其类型从DI容器(Autofac)中获取已注册的Task Process(IResolvedEvent resolvedEvent)
,以便对此进行处理事件。
如您所见,事件的类型仅在运行时才知道,我必须两次使用反射。第一次使用工厂从DI容器中检索正确的resolvedEvent
,第二次使用该实例上的方法IPersistableEvent
。
我要重构的主要问题是方法IEventHandler<TEvent> where TEvent : IPersistableEvent
返回一个对象,并且我想将此对象转换为我知道{{ 1}} 。
如果我可以像C#这样做,那就太好了
IEventHandler<TEvent>
不幸的是,我不能以这种方式将其强制转换为泛型类。是否有可能以不同的方式进行铸造,最好是没有反射?这是我当前的工作代码。
Handle
这是我用来从DI容器中检索正确的Invoke
的工厂:
IEventHandler<TEvent>
最后,我要调用的处理程序定义为:
TEvent