°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) >

µÚ90²¿·Ö

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ90²¿·Ö

С˵£º VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡




The¡¡idea¡¡of¡¡all¡¡of¡¡these¡¡projects¡¡is¡¡to¡¡make¡¡it¡¡possible¡¡to¡¡update¡¡a¡¡single¡¡project¡¡without¡¡needing¡¡¡¡

to¡¡update¡¡all¡¡of¡¡them¡£¡¡However£»¡¡what¡¡is¡¡not¡¡indicated¡¡in¡¡the¡¡picture¡¡is¡¡the¡¡fact¡¡that¡¡your¡¡appli

cation¡¡must¡¡be¡¡able¡¡to¡¡reference¡¡all¡¡three¡¡projects¡£¡¡If¡¡one¡¡of¡¡those¡¡projects¡¡is¡¡missing£»¡¡you¡¡have¡¡¡¡

a¡¡problem£»¡¡because¡¡your¡¡program¡¡cannot¡¡function¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡313¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡336¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

314¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡2¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡A¡¡PP¡¡L¡¡I¡¡CA¡¡TI¡¡O¡¡N¡¡¡¡¡¡CO¡¡N¡¡F¡¡I¡¡G¡¡U¡¡R¡¡AT¡¡IO¡¡N¡¡¡¡¡¡AN¡¡D¡¡¡¡¡¡D¡¡Y¡¡N¡¡A¡¡M¡¡I¡¡C¡¡¡¡L¡¡O¡¡AD¡¡I¡¡N¡¡G¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡12¡­1¡£¡¡How¡¡ponents¡¡can¡¡be¡¡defined¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡referencing¡¡of¡¡individual¡¡projects¡¡is¡¡not¡¡an¡¡issue¡£¡¡The¡¡issue¡¡is¡¡how¡¡each¡¡project¡¡learns¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡about¡¡the¡¡others¡£¡¡In¡¡previous¡¡chapters£»¡¡I¡¡said¡¡that¡¡you¡¡should¡¡use¡¡a¡¡factory£»¡¡because¡¡a¡¡factory¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡takes¡¡away¡¡the¡¡decision¡¡of¡¡what¡¡implementation¡¡to¡¡use¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Let¡¯s¡¡look¡¡at¡¡this¡¡from¡¡the¡¡perspective¡¡of¡¡code¡£¡¡Suppose¡¡the¡¡following¡¡interface¡¡definition¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡in¡¡a¡¡project¡¡that¡¡contains¡¡all¡¡interface¡¡definitions¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Interface¡¡IMyInterface¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Interface¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡A¡¡class¡¡that¡¡implements¡¡the¡¡interface¡¡is¡¡defined¡¡in¡¡a¡¡project¡¡called¡¡¡¡Implementations¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡MyImplementation¡¡£º¡¡Implements¡¡IMyInterface¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡a¡¡class¡¡in¡¡another¡¡project¡¡wants¡¡to¡¡use¡¡the¡¡functionality¡¡of¡¡MyImplementation£»¡¡then¡¡this¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡factory¡¡is¡¡created£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Module¡¡Factory¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Function¡¡Instantiate£¨£©¡¡As¡¡IMyInterface¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡New¡¡MyImplementation£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Module¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Because¡¡MyImplementation¡¡is¡¡not¡¡declared¡¡as¡¡¡¡Public£»¡¡the¡¡Factory¡¡module¡¡must¡¡be¡¡defined¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡in¡¡the¡¡project¡¡Implementations¡£¡¡This¡¡implies¡¡that¡¡the¡¡project¡¡that¡¡uses¡¡the¡¡functionality¡¡has¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reference¡¡to¡¡Implementations¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡337¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡2¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡AP¡¡P¡¡L¡¡I¡¡CAT¡¡I¡¡ON¡¡¡¡¡¡CO¡¡N¡¡F¡¡IG¡¡U¡¡R¡¡AT¡¡IO¡¡N¡¡¡¡¡¡A¡¡N¡¡D¡¡¡¡¡¡D¡¡Y¡¡N¡¡A¡¡M¡¡IC¡¡¡¡¡¡L¡¡O¡¡AD¡¡IN¡¡G¡¡315¡¡



¡¡¡¡¡¡¡¡¡¡Using¡¡a¡¡factory¡¡is¡¡acceptable¡¡and¡¡solves¡¡the¡¡problem¡¡of¡¡decoupling¡¡so¡¡that¡¡the¡¡user¡¡of¡¡the¡¡¡¡

implementation¡¡does¡¡not¡¡need¡¡to¡¡know¡¡about¡¡the¡¡implementation¡£¡¡The¡¡user¡¡does¡¡not¡¡have¡¡to¡¡¡¡

know¡¡the¡¡name¡¡of¡¡the¡¡implementation£»¡¡but¡¡does¡¡need¡¡to¡¡know¡¡in¡¡which¡¡project¡¡the¡¡implemen

tation¡¡resides¡£¡¡This¡¡means¡¡when¡¡you¡¡develop¡¡the¡¡code£»¡¡you¡¡need¡¡to¡¡reference¡¡the¡¡appropriate¡¡¡¡

project¡¡while¡¡coding¡£¡¡This¡¡is¡¡called¡¡ponent¡¡architecture£»¡¡in¡¡that¡¡you¡¡decouple¡¡the¡¡interface¡¡¡¡

from¡¡the¡¡implementation£»¡¡but¡¡you¡¡couple¡¡the¡¡projects¡£¡¡

¡¡¡¡¡¡¡¡¡¡You¡¡want¡¡to¡¡decouple¡¡the¡¡ponents¡¡at¡¡runtime¡¡£¨when¡¡the¡¡application¡¡runs£©¡¡to¡¡solve¡¡the¡¡¡¡

problem¡¡illustrated¡¡in¡¡Chapter¡¡8£»¡¡where¡¡we¡¡created¡¡a¡¡lighting¡¡kernel£»¡¡but¡¡did¡¡not¡¡know¡¡the¡¡lighting¡¡¡¡

implementations¡¡ahead¡¡of¡¡time¡£¡¡Using¡¡configuration£»¡¡you¡¡could¡¡have¡¡an¡¡end¡¡user¡¡¡°plug¡¡in¡±¡¡lighting¡¡¡¡

implementations¡¡that¡¡are¡¡controlled¡¡by¡¡the¡¡kernel¡£¡¡Developers¡¡like¡¡to¡¡call¡¡runtime¡¡decoupling¡¡¡¡

a¡¡plug¡­in¡¡architecture¡¡£¨¡¡http£º//en¡£wikipedia¡£org/wiki/Plugin£©¡£¡¡And¡¡this¡¡is¡¡where¡¡configuration¡¡¡¡

and¡¡convention¡¡e¡¡into¡¡play¡£¡¡¡°Convention¡¡over¡¡configuration¡±¡¡is¡¡a¡¡Ruby¡¡on¡¡Rails¡¡philosophy¡£¡¡¡¡

The¡¡idea¡¡is¡¡that¡¡developers¡¡define¡¡only¡¡the¡¡nonconventional¡¡parts¡¡of¡¡their¡¡applications¡£¡¡



Decoupling¡¡Using¡¡a¡¡Configuration¡¡Architecture¡¡



In¡¡a¡¡runtime¡¡configuration¡¡scenario£»¡¡the¡¡architecture¡¡of¡¡Figure¡¡12¡­1¡¡is¡¡not¡¡altered£»¡¡it¡¡still¡¡has¡¡the¡¡¡¡

definitions£»¡¡implementations£»¡¡kernel£»¡¡and¡¡user¡¡assemblies¡£¡¡What¡¡is¡¡altered¡¡is¡¡how¡¡the¡¡references¡¡to¡¡¡¡

each¡¡of¡¡the¡¡pieces¡¡are¡¡created¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡Let¡¯s¡¡start¡¡with¡¡a¡¡simple¡¡situation¡£¡¡You¡¡have¡¡a¡¡question£»¡¡and¡¡you¡¡happen¡¡to¡¡know¡¡who¡¡would¡¡¡¡

know¡¡the¡¡answer¡£¡¡You¡¡know¡¡the¡¡person¡¡and¡¡you¡¡know¡¡she¡¡has¡¡a¡¡telephone¡£¡¡What¡¡you¡¡don¡¯t¡¡¡¡

know¡¡is¡¡her¡¡telephone¡¡number¡£¡¡Translated¡¡into¡¡programming¡¡terms£»¡¡the¡¡telephone¡¡acts¡¡as¡¡an¡¡¡¡

interface¡¡to¡¡an¡¡implementation¡£¡¡The¡¡challenge¡¡is¡¡connecting¡¡to¡¡the¡¡implementation¡£¡¡In¡¡the¡¡¡¡

case¡¡of¡¡the¡¡telephone£»¡¡you¡¡can¡¡discover¡¡the¡¡telephone¡¡number¡¡by¡¡using¡¡the¡¡telephone¡¡book¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡telephone¡¡book¡¡contains¡¡the¡¡names¡¡of¡¡individuals¡¡at¡¡specific¡¡addresses¡¡and¡¡their¡¡tele

phone¡¡numbers¡£¡¡Names¡¡and¡¡addresses¡¡are¡¡easy¡¡to¡¡remember£»¡¡telephone¡¡numbers¡¡are¡¡a¡¡bit¡¡¡¡

more¡¡plicated¡£¡¡Thus£»¡¡the¡¡telephone¡¡book¡¡serves¡¡the¡¡purpose¡¡of¡¡cross¡­referencing¡¡an¡¡easy¡¡¡¡

piece¡¡of¡¡information¡¡with¡¡a¡¡more¡¡plicated¡¡piece¡¡of¡¡information¡£¡¡In¡¡programming¡¡terms£»¡¡¡¡

the¡¡cross¡­referencing¡¡is¡¡a¡¡configuration¡¡file¡¡that¡¡is¡¡associated¡¡with¡¡the¡¡¡¡application¡£¡¡Once¡¡¡¡

you¡¡have¡¡cross¡­referenced¡¡the¡¡information£»¡¡you¡¡have¡¡the¡¡location¡¡of¡¡the¡¡project¡¡and¡¡can¡¡then¡¡¡¡

instantiate¡¡the¡¡cross¡­referenced¡¡type¡£¡¡In¡¡programming¡¡terms£»¡¡the¡¡configuration¡¡file¡¡gives¡¡you¡¡¡¡

the¡¡location¡¡and¡¡name¡¡of¡¡the¡¡type¡£¡¡



Decoupling¡¡Using¡¡a¡¡Convention¡¡Architecture¡¡



Configuration¡¡files¡¡are¡¡useful£»¡¡but¡¡they¡¡can¡¡bee¡¡too¡¡plicated¡£¡¡Some¡¡projects¡¡have¡¡such¡¡¡¡

plicated¡¡configuration¡¡files¡¡that¡¡bugs¡¡arise¡¡due¡¡to¡¡an¡¡improperly¡¡configured¡¡application¡£¡¡

¡¡¡¡¡¡¡¡¡¡Convention¡¡architecture¡¡attempts¡¡to¡¡simplify¡¡plexity¡¡by¡¡instituting¡¡a¡¡familiar¡¡pattern¡¡¡¡

to¡¡the¡¡referencing¡¡of¡¡the¡¡type¡£¡¡Consider¡¡a¡¡telephone¡¡number¡¡like¡¡1¡­800¡­BIG¡­CARS¡£¡¡The¡¡1¡¡and¡¡¡¡

800¡¡are¡¡easy¡¡to¡¡remember£»¡¡as¡¡is¡¡BIG¡¡CARS¡£¡¡This¡¡works¡¡because¡¡of¡¡the¡¡convention¡¡where¡¡a¡¡digit¡¡¡¡

on¡¡the¡¡telephone¡¡keypad¡¡corresponds¡¡to¡¡three¡¡or¡¡four¡¡letters¡£¡¡So¡¡in¡¡the¡¡case¡¡of¡¡BIG¡­CARS£»¡¡the¡¡¡¡

number¡¡is¡¡244¡­2277¡£¡¡

¡¡¡¡¡¡¡¡¡¡Conventions¡¡are¡¡good¡¡things¡¡as¡¡long¡¡as¡¡you¡¡know¡¡what¡¡they¡¡are¡£¡¡For¡¡example£»¡¡if¡¡you¡¡were¡¡¡¡

not¡¡familiar¡¡with¡¡the¡¡telephone¡¡system£»¡¡you¡¡would¡¡wonder¡¡how¡¡BIG¡¡CARS¡¡represents¡¡a¡¡telephone¡¡¡¡

number¡£¡¡The¡¡missing¡¡piece¡¡of¡¡information¡¡is¡¡the¡¡convention¡¡of¡¡how¡¡to¡¡convert¡¡the¡¡letters¡¡into¡¡¡¡

the¡¡numbers¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡338¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

316¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡2¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡A¡¡PP¡¡L¡¡I¡¡CA¡¡TI¡¡O¡¡N¡¡¡¡¡¡CO¡¡N¡¡F¡¡I¡¡G¡¡U¡¡R¡¡AT¡¡IO¡¡N¡¡¡¡¡¡AN¡¡D¡¡¡¡¡¡D¡¡Y¡¡N¡¡A¡¡M¡¡I¡¡C¡¡¡¡L¡¡O¡¡AD¡¡I¡¡N¡¡G¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡What¡¡is¡¡useful¡¡with¡¡convention¡¡architecture¡¡is¡¡that¡¡you¡¡are¡¡not¡¡limited¡¡to¡¡what¡¡is¡¡defined¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡in¡¡the¡¡configuration¡¡file£»¡¡as¡¡there¡¡is¡¡a¡¡general¡¡logic¡£¡¡When¡¡implementing¡¡a¡¡convention¡¡architec

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ture£»¡¡you¡¡are¡¡not¡¡discarding¡¡configuration£»¡¡but¡¡you¡¡are¡¡making¡¡assumptions¡¡for¡¡the¡¡user¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡implementation¡¡of¡¡the¡¡code¡£¡¡You¡¡will¡¡still¡¡probably¡¡have¡¡a¡¡configuration¡¡file£»¡¡but¡¡the¡¡configuration¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡for¡¡specific¡¡functionality¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Regardless¡¡of¡¡whether¡¡you¡¡use¡¡a¡¡configuration¡¡architecture¡¡or¡¡a¡¡convention¡¡architecture£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡will¡¡dynamically¡¡load¡¡assemblies£»¡¡as¡¡demonstrated¡¡in¡¡this¡¡chapter¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Setting¡¡Up¡¡the¡¡Dynamic¡¡Loading¡¡Projects¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡this¡¡chapter¡¯s¡¡examples£»¡¡four¡¡projects¡¡are¡¡defined£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Definitions£º¡¡A¡¡class¡¡library¡¡that¡¡contains¡¡the¡¡definition¡¡for¡¡the¡¡interface¡¡IDefinition¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡class¡¡ConfigurationLoader¡£¡¡The¡¡class¡¡ConfigurationLoader¡¡will¡¡contain¡¡the¡¡functionality¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡dynamically¡¡load¡¡the¡¡assemblies¡¡¡¡Implementations1¡¡and¡¡Implementations2¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Implementations1£º¡¡A¡¡class¡¡library¡¡that¡¡contains¡¡the¡¡class¡¡Implementation¡¡and¡¡implements¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡interface¡¡IDefinition¡£¡¡The¡¡class¡¡Implementation¡¡is¡¡defined¡¡in¡¡the¡¡namespace¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementations1¡¡and¡¡is¡¡not¡¡declared¡¡¡¡Public¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Implementations2£º¡¡A¡¡class¡¡library¡¡that¡¡contains¡¡the¡¡class¡¡Implementation¡¡and¡¡imple

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ments¡¡the¡¡interface¡¡IDefinition¡£¡¡The¡¡class¡¡Implementation¡¡is¡¡defined¡¡in¡¡the¡¡namespace¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementations2¡¡and¡¡is¡¡not¡¡declared¡¡¡¡Public¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡CallRuntimeImplementation£º¡¡A¡¡console¡¡application¡¡that¡¡will¡¡be¡¡referenced¡¡throughout¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡chapter¡¡as¡¡the¡¡user¡¡application¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡Definitions¡¡project£»¡¡the¡¡references¡¡are¡¡to¡¡the¡¡standard¡¡¡¡libraries¡¡£¨¡¡System£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£Core£»¡¡and¡¡so¡¡on£©¡£¡¡The¡¡unique¡¡reference¡¡that¡¡you¡¡need¡¡to¡¡add¡¡is¡¡to¡¡System¡£configuration¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡System¡£configuration¡¡reference¡¡contains¡¡the¡¡types¡¡that¡¡you¡¡need¡¡to¡¡read¡¡the¡¡application¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡configuration¡¡file¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Here¡¡is¡¡the¡¡code¡¡for¡¡IDefinition£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Interface¡¡IDefinition¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Function¡¡TranslateWord£¨ByVal¡¡word¡¡As¡¡String£©¡¡As¡¡String¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Interface¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Implementations1¡¡project¡¡contains¡¡the¡¡file¡¡¡¡Implementation¡£vb£»¡¡which¡¡is¡¡the¡¡type¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementation¡¡and¡¡implements¡¡the¡¡interface¡¡¡¡IDefinitions¡£¡¡The¡¡implementation¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementation¡¡is¡¡as¡¡follows¡¡£¨make¡¡sure¡¡you¡¡add¡¡a¡¡reference¡¡to¡¡the¡¡Definitions¡¡project£©£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Imports¡¡Definitions¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡Implementation¡¡£º¡¡Implements¡¡IDefinition¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Function¡¡TranslateWord£¨ByVal¡¡word¡¡As¡¡String£©¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡As¡¡String¡¡Implements¡¡IDefinition¡£TranslateWord¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡¡¨¡¨¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡339¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡2¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡AP¡¡P¡¡L¡¡I¡¡CAT¡¡I¡¡ON¡¡¡¡¡¡CO¡¡N¡¡F¡¡IG¡¡U¡¡R¡¡AT¡¡IO¡¡N¡¡¡¡¡¡A¡¡N¡¡D¡¡¡¡¡¡D¡¡Y¡¡N¡¡A¡¡M¡¡IC¡¡¡¡¡¡L¡¡O¡¡AD¡¡IN¡¡G¡¡317¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡class¡¡Implementation¡¡has¡¡a¡¡hard¡¡reference¡¡to¡¡¡¡IDefinition£»¡¡so¡¡under¡¡the¡¡References¡¡¡¡

node¡¡in¡¡the¡¡Implementations1¡¡project¡¡is¡¡a¡¡reference¡¡to¡¡the¡¡Definitions¡¡project¡£¡¡Because¡¡there¡¡¡¡

is¡¡a¡¡hard¡¡reference¡¡to¡¡IDefinition£»¡¡the¡¡interface¡¡IDefinition¡¡is¡¡declared¡¡as¡¡Public£»¡¡but¡¡¡¡

Implementation¡¡is¡¡not¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡Implementations2¡¡project¡¡has¡¡the¡¡same¡¡implementation¡¡and¡¡reference¡¡to¡¡Definitions¡¡¡¡

as¡¡Implementations1¡£¡¡What¡¡is¡¡special¡¡about¡¡Implementations2¡¡is¡¡its¡¡use¡¡of¡¡a¡¡strong¡¡name£»¡¡which¡¡¡¡

makes¡¡it¡¡unique¡£¡¡Thus¡¡far£»¡¡all¡¡of¡¡your¡¡assemblies¡¡are¡¡not¡¡unique¡£¡¡To¡¡make¡¡them¡¡unique£»¡¡you¡¡¡¡

need¡¡to¡¡enable¡¡signing¡£¡¡You¡¡must¡¡also¡¡enable¡¡signing¡¡in¡¡the¡¡Definitions¡¡project¡£¡¡The¡¡next¡¡¡¡

section¡¡describes¡¡how¡¡to¡¡enable¡¡signing¡£¡¡


·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ