public interface ISomething {
public interface ITransport<out T> where T : ISomething
public class Transport<T> : ITransport<T> where T: ISomething
public class Potatoes : ISomething {
ITransport<ISomething> Transport;
public Route(ITransport<ISomething> t)
public static void Main()
Transport<Potatoes> myTransport = null ;
Route myRoute = new Route(myTransport);