Въведение в Асамблеята Ююан Знаем, че членовете на клас, дефинирани като вътрешни (включително типове, методи, свойства, променливи, събития), могат да бъдат достъпени само в една и съща асемблерна система (разбира се, говоря за нормалния начин тук, без да се включва достъп чрез отражение). Това правило е в . .NET 2.0 е леко счупен, което ни позволява да настроим вътрешните членове на събранието да бъдат достъпвани от конкретни членове. Ние наричаме асемблера, която съдържа тези вътрешни елементи, изходна асемблея, а асемблиращата асемблея се нарича приятелска асемблея.
Използване при сглобяване на приятели Този атрибут се използва на ниво асемблер.
По този начин, след като програмата FriendAssembly се позовава на асемблера, тя може да достъпи вътрешното свойство Name. Общо взето, този асемблер: InternalsVisibleTo("FriendAssembly") е по-добре поставен в AssemblyInfo.cs, все пак е на ниво асемблер.
Кога да използвате InternalsToVisibleTo Всъщност този атрибут не се използва в общи приложения и не трябва да злоупотребяваме с него. Защото като цяло добре проектираната конструкция не е задължително да е отворена за външния свят. Но сценариите за unit testing могат да се възползват от тази функция. С тази функция можем да зададем, че кодът за unit тестове има достъп до тези вътрешни членове, за да можем да ги тестваме в единици. Въпреки това, това изисква да се напише името на friend assembly-то мъртво в изходния асемблер, което води до някои проблеми със сигурността. Сигурността може да се гарантира чрез въвеждане на сигнатурни сборки.
ВътрешностиToVisibleTo и сигнатурата Можете директно да посочите името и публичния ключ на приятелската мета асемблерка към InternalsVisibleTo. Използвайте командния ред на VS developer, за да генерирате публичния ключ за FriendAssembly:
Посочете името на friend assembly и публичния ключ към изходния асемблер:
Всъщност, тъй като приятелската асемблея се позовава на изходната асемблея, а подписаната асемблерка се позовава на неподписана асемблея, и подписаната асемблея не може да посочи неподписана приятелска асемблея, някое от тях е подписано, тогава трябва да бъде подписано.
|