Is it possible to use unity like so:
container.Register(typeof(IMyType<car>), typeof(MyType1<car>));
container.Register(typeof(IMyType<>), typeof(MyType2<>));
.. so that when I try to resolve IMyType<car> I get a MyType1<car>… but when I try to resolve IMyType<bus> I get MyType2<bus> ? Or perhaps another way to do the same thing so that a defined generic takes precedence over an open generic?
Yes, you can do exactly that: