あなたの問題は Caliburn.Micro に直接関係していませんが、C# でリフレクションを使用してジェネリック メソッドを呼び出す方法です。
SO については、すでにかなりの数の非常に良い質問があります:
リフレクションを使用してジェネリック メソッドを呼び出すにはどうすればよいですか?
ただし、メソッドはクラスUriFor<T>
の Caliburn によって拡張メソッドとして定義されているため、あなたのケースは少し特殊です。NavigationExtensions
したがって、いくつかの追加の手順が必要であり、NavigationExtensions
呼び出す前にタイプから開始しNavigate
ます。
//Create the UriFor Method for your ViewModelType
var navigationExtension = typeof(NavigationExtensions);
var uriFor = navigationExtension.GetMethod("UriFor");
var genericUriFor = uriFor.MakeGenericMethod(yourViewModelType);
//Invoke UriFor: an instance of UriBuilder<T> is returned
var uriBuilder = genericUriFor.Invoke(null, new[] {navigationService});
//Create and Navigate on the returned uriBuilder
var navigateMethod = uriBuilder.GetType().GetMethod("Navigate");
navigateMethod.Invoke(uriBuilder, null);