我如何做以下的事情? historyType 在Adapt中不是可识别的类型。
Type historyType = Type.GetType("Domain.MainBoundedContext.CALMModule.Aggregates.LocationAgg." + modifiedEntry.GetType().Name + "History");
ServiceLocationHistory history = adapter.Adapt<ServiceLocation, historyType>(modifiedEntry as ServiceLocation);
historyRepository.Add(history);
编辑: 我最终这样做了:
ServiceLocationHistory history = adapter.GetType()
.GetMethod("Adapt", new Type[] { typeof(ServiceLocation) })
.MakeGenericMethod(typeof(ServiceLocation), typeof(ServiceLocationHistory))
.Invoke(adapter, new object[] { modifiedEntry as ServiceLocation })
as ServiceLocationHistory;
答案 0 :(得分:2)
这可能是也可能不是您的选项,但您始终可以使用DynamicMethod并发出创建类型的IL并返回ServiceLocationHistory
。我经常这样做,而不是hacky反射技巧,它几乎总是更快。
否则,您可以使用反射:
ServiceLocationHistory history = adapter.GetType()
.GetMethod("Adapt")
.MakeGenericMethod(typeof(ServiceLocation), historyType)
.Invoke(adapter, new [] {modifiedEntry})
as ServiceLocationHistory;