title: Contravariance troubles with nested interfaces
body: <pre><code>interface IModel
  { 
  }
  
  class ModelA : IModel
  {
  }
  
  interface IService&lt;T&gt; where T: IModel
  {
  }
  
  class ServiceA : IService&lt;ModelA&gt;
  {
  }
  </code></pre>
  
  <p>Given the definition of classes and interfaces above, 
  The following works:</p>
  
  <pre><code>IModel model = new ModelA();
  </code></pre>
  
  <p>Indicating that <code>ModelA</code> can be cast to its interface <code>IModel</code></p>
  
  <p>The following also works:</p>
  
  <pre><code>IService&lt;ModelA&gt; service1 = new ServiceA();
  </code></pre>
  
  <p>Indicating that <code>ServiceA</code> can be cast to its interface <code>IService&lt;ModelA&gt;</code></p>
  
  <p>However, the following fails:</p>
  
  <pre><code>IService&lt;IModel&gt; service2 = new ServiceA();
  </code></pre>
  
  <p>The error message says that <code>ServiceA</code> cannot be implicitly to converted to <code>IService&lt;IModel&gt;</code></p>
  
  <p>Im surprised by this since:<br>
  <code>ModelA</code> can be cast to <code>IModel</code>, and<br>
  <code>ServiceA</code> can be cast to <code>IService&lt;IModel&gt;</code><br>
  i was expecting the following to happen:<br>
  <code>ServiceA</code> -> <code>IService&lt;ModelA&gt;</code> -> <code>IService&lt;IModel&gt;</code></p>
  
  <p>But that doesnt seem to be possible.</p>
  
  <p>Anyone have an explanation to why that is?</p>