所谓“依懒注入”
程序中。依赖注入的目标并非为应用程序添加更多的功能,而是提升了组件的
重用性,并为应用程序搭建一个具有较强灵活性和扩展性的平台。在程序实现上就用
Assembly.Load(AssemblyName).CreateInstance(typeName) 在程序运行时动态创建实例 .PetShop4.0 中多次应用了与配置文件相强合的反射注入技术。下面就介绍一下反射注入技术在 PetShop4.0 多层应用程序和应用。
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6628499292856412&dt=1200879276209&lmt=1200879288&format=468x60_as&output=html&correlator=1200879276209&channel=8929656665&url=http%3A%2F%2Fwww.cnblogs.com%2Fxuanfeng%2Farchive%2F2006%2F12%2F03%2F580330.html&color_bg=FFFFFF&color_text=000000&color_link=000033&color_url=4C4C4C&color_border=4C4C4C&ad_type=text_image&cc=2093&ga_vid=162552907.1200640573&ga_sid=1200879276&ga_hid=90171891&ga_fc=true&flash=9&u_h=1024&u_w=1280&u_ah=994&u_aw=1280&u_cd=32&u_tz=-480&u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="allowtransparency">
项目名 | PetShop.CacheDependencyFactory | ||
类名 | DependencyAccess | 方法 | privatestaticIPetShopCacheDependency LoadInstance(string className) |
配置文件中的值 | <appSetting> ………. <add key="CacheDependencyAssembly" value="PetShop.TableCacheDependency"/> …… </appSetting> | ||
代码文件中的实现 | string path=ConfigurationManager.AppSettings["CacheDependencyAssembly"]; string fullyQualifiedClass = path + "." + className; return (IPetShopCacheDependency)Assembly.Load(path) .CreateInstance(fullyQualifiedClass); | ||
从上面的实现来看其实是很简单的。三个步骤就实现了:两前个步骤,主要是为动态创建 实例提供参数:程序集名称,和类名称(类型名). 1. 执行ConfigurationManager.AppSettings[“keyName”]来获取配置文件中的键值,也就 程序集的名称AssemblyName。 2. 组合类名称typeName。 3. 执行Assembly.Load(AssemblyName).CreateInstance(typeName)进行动太创建实例 其实PetShop4.0中实现反射注入技术都是上面的那种思想。所以下面就省去配置文件中的 信息和实现的代码实现信息,只是统计反射注入技术在PetShop4.0中应用的位置信息。 |
项目名 | PetShop.DALFactory |
类名 | DataAccess |
方法 | 1. public static PetShop.IDAL.ICategory CreateCategory() 2. public static PetShop.IDAL.IInventory CreateInventory() 3. public static PetShop.IDAL.IItem CreateItem() 4. public static PetShop.IDAL.IOrder CreateOrder() 5. public static PetShop.IDAL.IProduct CreateProduct() |
项目名 | PetShop.MessagingFactory |
类名 | QueueAccess |
方法 | public static PetShop.IMessaging.IOrder CreateOrder() |
项目名 | PetShop.ProfileDALFactory |
类名 | DataAccess |
方法 | Publics tatic PetShop.IProfileDAL.IPetShopProfileProvider CreatePetShopProfileProvider() |
项目名 | PetShop.ProfileDALFactory |
类名 | DataAccess |
方法 | Publics tatic PetShop.IProfileDAL.IPetShopProfileProvider CreatePetShopProfileProvider() |