Единственное, что вам действительно нужно сделать общедоступным, - это интерфейс (а не конкретная реализация).
Вы можете использовать абстрактную фабрику или (проще) Ninject для сопоставления открытого интерфейса с внутренним бетоном;таким образом, ваш клиентский код просто должен запросить экземпляр «вещи», которая реализует интерфейс, и ваша фабрика / контейнер вернет реализацию.
Вы должны ознакомиться с принципом инверсии зависимости, а также -с этим.