仅在运行时知道占位符类型时,转换为通用类

时间:2019-07-05 17:12:26

标签: c# generics reflection refactoring

我有一段代码有些丑陋,因为我必须使用反射来使其工作。我忍不住想知道是否有更好/更干净的方法来实现相同的目标。

情况如下:我的代码订阅了事件存储。每次事件存储记录新事件时,都会执行我的方法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

0 个答案:

没有答案