嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈�《超噌�殻窟�嵌虜隆輓麈觚翹瀘卉韮�仍仍�。� 烏御危列
浪慕利 卦指云慕朕村 厘議慕尺 厘議慕禰 TXT畠云和墮 序秘慕杏 紗秘慕禰

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及113嫗

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��



  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。 

     The CallRuntimeImplementation project is the user application and is responsible for calling  

the functionality in Implementations1 and Implementations2。 What you need to consider very  

carefully in the CallRuntimeImplementation project structure is that in the References node�察 �

only the Definitions project is present。 It does not contain references to  Implementations1 or  

Implementations2。  

      It is important to understand that when a project does not have a reference to another  

project�察�it does not imply that the functionality cannot be used。 To use the functionality of a  

project that is not referenced�察�you need to write code that will load the assembly dynamically。  

With a dynamically loaded assembly�察�you can do whatever is possible with a hard´linked reference。 



*Note  Remember that assemblies are the results of piling a project。 A code library will produce a DLL  

file�察�while an executable project will produce an EXE file。  



Signing an Assembly 



Signing an assembly is giving the assembly a strong name�察�which is a unique name。 Think of it  

as follows。 My name is Christian Gross�察�and on this planet we call Earth�察�there are probably a  

few dozen people with the name Christian Gross。 Our governments distinguish between the  

various people with my name by way of a passport。 A passport is a unique identifier that converts  

my mon name into a strong name。 This is exactly what happens when you use strong names  

with an assembly。 A strong name is required when you want to add the assembly to the global  

assembly cache ��GAC��。 The GAC is where you can place an assembly to make it available for  

global shared access。 You¨ll learn more about the GAC in the ^Loading a Strongly Named  

Assembly ̄ section later in this chapter。 

      By default�察�signing is not used。 To enable signing�察�you need to alter the properties of  

the project。 Follow these steps to enable signing for the Implementations2 project and the  

Definitions project�此 �



      1。 Right´click the project in the Solution Explorer and select Properties。 



     2。  Click the Signing tab。 



     3。  Check the Sign the Assembly check box。 



     4。  Select  from the bo box�察�which pops up a dialog box allowing you to specify  

         the file name。 


´´´´´´´´´´´´´´´´´´´´´´Page 340´´´´´´´´´´´´´´´´´´´´´´´

318       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 



                5。  Type in a key file name and a password�察�and then click OK。 



                6。  Save your project。 



           Setting the Output Path 



           The aim of the chapter is to demonstrate two things�此�configuration files and the dynamic abil

           ities of 。 Explaining�察�debugging�察�and running the configuration source code is simple�察�because  

           everything is laid out for you in the Visual Basic IDE。 You will not run into any problems running  

           the configuration code。 However�察�for the dynamic loading�察�there is a plication。  

                As you¨ve seen�察�the  CallRuntimeImplementation project does not have explicit references  

           to Implementations1 and Implementations2。 This means that if the code from Implementations1  

           or Implementations2 is referenced from CallRuntimeImplementations using dynamic techniques�察 �

           Visual Basic Express will have no clue as to what you are doing。 You might argue that there is  

           one Visual Basic Express solution�察�and Implementations1 and  Implementations2 are part of the  

           overall project�察�but unless an explicit reference is made�察�Visual Basic Express does not know  

           about this。 

                However�察�you can overe this problem fairly easily by changing where the projects  

           place their piled output。 As a habit�察�I often make all projects build to a central directory。  

           You can set the output directory in the pile tab of a project¨s Properties w
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��0�� 家��0��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��