title: Implicit type argument in generic class
body: <p>given that I have ViewModels with strongly typed parameter
  and I use NavigationService that accept type of page as a parameter,
  when parameter of incorrect type is passed to the Navigate method.
  then I want the compiler to throw an error.</p>
  
  <p>I've written following so far:</p>
  
  <pre><code>interface IPageViewModel&lt;TParameter&gt;    
  
  void Navigate&lt;TViewModel, TParameter&gt;(TParameter argument) 
              where TViewModel : IPageViewModel&lt;TParameter&gt;;
  
  class PageWithStringParameter : IPageViewModel&lt;string&gt;
  </code></pre>
  
  <p>Why this does not work?</p>
  
  <pre><code>navigationService.Navigate&lt;PageWithStringParameter&gt;("some string");
  </code></pre>
  
  <p>If I pass PageWithStringParameter as a TViewModel argument, TParameter must be of type string, since it implemets IPageViewModel.
  Passing TParameter type argument is redundant.</p>
  
  <p>Is there any way, how to avoid writing this:</p>
  
  <pre><code>navigationService.Navigate&lt;PageWithStringParameter, string&gt;("some string");
  </code></pre>
  
  <p>The compiler errors are quite confusing, especialy if I have also parameterless overload of NavigateMethod</p>