If your version is a number, you could have something like public interface IOrderMessageHandler { void Handle( OrderMessage message ); }
public class OrderMessageHandlerVersion123 : IOrderMessageHandler { ... }
having a naming convention and constructing them using reflection:
var handler = (IOrderMessageHandler)Activator.CreateInstance( GetType().Assembly.GetType("MyNamespace.OrderMessageHandlerVersion"+ message.Version));handler.Handle(message)