Я думаю, вам следует отправить две реализации Facade, одну для «внутренних» потребителей, которая раскрывает все методы, и другую, которая предоставляет только подмножество. Вы можете достичь этого, поддерживая только одну кодовую базу, имея два отдельных процесса сборки. На ум приходит одна техника - использовать директивы компилятора , чтобы исключить метод из внешней сборки, или пометить его как внутренний, если этого требуют другие открытые методы. Если вы отправляете чувствительные методы с внутренними модификаторами, вы также можете захотеть реализовать обфускацию.
РЕДАКТИРОВАТЬ
Возможно, было бы чище, вместо того чтобы иметь директивы вокруг каждого метода для использования частичных классов, определять частичный класс для чувствительных методов и помещать реализацию всего класса в директиву.
public partial class MyClass
{
public void NonSensitive(){}
}
#if INTERNAL_BUILD
public partial class MyClass
{
public void Sensitive(){}
}
#endif
Вы можете иметь этот частичный класс в том же или в отдельном файле, что может быть хорошим уровнем разделения, поскольку вы можете добавить имя файла x_Sensitive.cs или подобное.