Спрятать конструктор?
Спрятать конструктор?
Есть некрасивый статический ТМап чего-то типа ТА на чего-то типа ТБ.
ТА довольно часто в переработке - именно по-этому вынесен в класс,
имплементирован внутри (там не много) ТМап.
Известно, что ТА - комплексный, а ТБ - пока не интересен.
Мап имплементирован как синглетон, агрегирующий Диктионари<ТА, ТБ>.
Для тестирования мне нужно сменить стандартную набивку Мап на другую.
Для этого необходимые части переведены в протектед и вроде все работает.
До тестов мне не нужно было создавать ТА вне сборки и интернал на
конструкторе было достаточным для изоляции - ТА не создавались вне сборки.
При тестах, а это другая сборка, наследующий класс не смог создать объект ТА
- не видел конструктора - пришлось менять интернал на паблик для конструктора
ТА.
Мне, однако, это не нравится - хочу не иметь возможности создавать ТА
вне наследников ТМап где бы они не случились. В наследниках, однако,
хочу иметь возможность создавать оные.
Один вариант понятен - запихнуть потомка в ту же сборку - мне он тоже не
нравится - нарушается правило: код тестов - только в сборках тестов.
В общем вопрос такой: Каким образом ограничить доступ к конструктору
внутреннего класса только наследниками внешнего класса независимо от
сборки?
П.С. Если не понятно - нарежу примерчик после обеда...
Упссс... упустил в описании проблемы.
Оно там там давно есть. .. изначально создается пара проектов - дллка и тестовая дллка и в первой есть ИнтерналВисиблеТо на вторую.
На всякий случай добавлю - сборки еще и подписаны.
Вот только конструктор внутреннего класса либо не виден, либо публичен. А нужно - ограниченно виден, только внутри наследников.
читаем
https://stackoverflow.com/questions/204739/what-is-the-c-s...
мало? задаем гуглу friend class concept in c# и читаем дальше, выбираем что лучше подходит (ндравицца).