Requiring interfaces instead of classes