Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Спрятать конструктор?

212  
Murr патриот11.04.18 13:53
Murr
11.04.18 13:53 

Спрятать конструктор?


Есть некрасивый статический ТМап чего-то типа ТА на чего-то типа ТБ.

ТА довольно часто в переработке - именно по-этому вынесен в класс,

имплементирован внутри (там не много) ТМап.


Известно, что ТА - комплексный, а ТБ - пока не интересен.


Мап имплементирован как синглетон, агрегирующий Диктионари<ТА, ТБ>.


Для тестирования мне нужно сменить стандартную набивку Мап на другую.

Для этого необходимые части переведены в протектед и вроде все работает.


До тестов мне не нужно было создавать ТА вне сборки и интернал на

конструкторе было достаточным для изоляции - ТА не создавались вне сборки.


При тестах, а это другая сборка, наследующий класс не смог создать объект ТА

- не видел конструктора - пришлось менять интернал на паблик для конструктора

ТА.

Мне, однако, это не нравится - хочу не иметь возможности создавать ТА

вне наследников ТМап где бы они не случились. В наследниках, однако,

хочу иметь возможность создавать оные.


Один вариант понятен - запихнуть потомка в ту же сборку - мне он тоже не

нравится - нарушается правило: код тестов - только в сборках тестов.


В общем вопрос такой: Каким образом ограничить доступ к конструктору

внутреннего класса только наследниками внешнего класса независимо от

сборки?


П.С. Если не понятно - нарежу примерчик после обеда...


#1 
Программист коренной житель11.04.18 15:32
NEW 11.04.18 15:32 
в ответ Murr 11.04.18 13:53

Добавь

[assembly: InternalsVisibleTo("YourUnitTestAssembly")]


а AssemblyInfo.cs и никаких гвоздей :)

#2 
Murr патриот11.04.18 16:45
Murr
NEW 11.04.18 16:45 
в ответ Программист 11.04.18 15:32

Упссс... упустил в описании проблемы.

Оно там там давно есть. .. изначально создается пара проектов - дллка и тестовая дллка и в первой есть ИнтерналВисиблеТо на вторую.

На всякий случай добавлю - сборки еще и подписаны.


Вот только конструктор внутреннего класса либо не виден, либо публичен. А нужно - ограниченно виден, только внутри наследников.

#3 
  moose старожил11.04.18 20:17
NEW 11.04.18 20:17 
в ответ Murr 11.04.18 13:53

читаем


https://stackoverflow.com/questions/204739/what-is-the-c-s...


мало? задаем гуглу friend class concept in c# и читаем дальше, выбираем что лучше подходит (ндравицца).

#4