title: Accessing a method which is not on the base Interface
body: <p>I have a design issue and am looking for the best design solution. I have added an example of the issue below.</p>
  
  <pre><code>public interface IVehicle&lt;T&gt;
  {
      int GetEngineSize();
  }
  
  public class Car : IVehicle&lt;Car&gt;
  {
      public int GetEngineSize()
      {
          throw new NotImplementedException();
      }
  
      public bool HasSpolier()
      {
          return true;
      }
  }
  
  public class Bus : IVehicle&lt;Bus&gt;
  {
      public int GetEngineSize()
      {
          throw new NotImplementedException();
      }
  }
  
  public abstract class BaseController&lt;T&gt;
  {
      public IVehicle&lt;T&gt; Repository { get; set; }
  }
  
  public abstract class CarController : BaseController&lt;Car&gt;
  {
      public CarController()
      {
          // How can I access the HasSpolier method from the IVehicle&lt;T&gt; without having to cast the Interface to concrete class Car
          bool result = Repository.HasSpolier();
      }
  }
  </code></pre>