0

重複の可能性:
Type を <T> に動的に渡す

以下のようなことをするにはどうすればよいですか? 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;
4

1 に答える 1

2

これはオプションである場合とそうでない場合がありますが、いつでも DynamicMethod を使用して、タイプを作成して を返す IL を発行できますServiceLocationHistory。ハックなリフレクション トリックの代わりにこれを行うことが多く、ほとんどの場合は高速です。

それ以外の場合は、リフレクションを使用して次のことができます。

ServiceLocationHistory history = adapter.GetType()
                                        .GetMethod("Adapt")
                                        .MakeGenericMethod(typeof(ServiceLocation), historyType)
                                        .Invoke(adapter, new [] {modifiedEntry})
                                         as ServiceLocationHistory;
于 2012-12-15T00:00:36.917 に答える