Inside ObjectBuilder Part 4
2007-12-18 21:33
316 查看
ObjectBuilderApplicationBlock文/黄忠成2006/9/21 八、ObjectBuilder实务 8-1、ObjectBuilderWithConfiguration截至目前为止,本文一直以程序方式来配置ObjectBuidler建立对象所需的各种对象,但在实务上,这些动作应该是交由配置文件来负责,这样才能在不重新编译应用程序的情况下,改变其行为或增加其功能。很幸运的,Microsoft于ObjectBuilder的范例中提供了一个途径来达到此目的,该范例定义了一个.xsd文件,其内定义了ConstructorInjection、SetterInjection、Singleton、TypeMapping所需要的schema,当然!这个xsd中也定义了Strategy的schema,允许设计者通过配置文件来添加对象建立时所需使用的Strategys。 ConsturctorInjectionWithConfiguration我将Microsoft所提供可配置ObjectBuidler的范例中关于处理配置文件时的.xsd及相关文件提取出来,并添加MethodInjection时所需要的schema及程序代码,放置于本文的范例程序档中,当读者们需要使用配置文件这个功能时,可以将Config目录中的ObjectBuilderXmlConfig.xsd、ObjectBuilderXmlConfig.xsx、ObjectBuilderXmlConfig.cs、ObjectBuilderXmlConfig.Generate.cs等文件复制到项目目录中,并将ObjectBuilderXmlConfig.xsd、ObjectBuilderXmlConfig.Generate.cs加入到项目中,完成后再将ObjectBuilderXmlConfig.xsd设置成EmbeddedResource,如图10所示。图10接着将修改ObjectBuilderXmlConfig.cs中关于由Resource中取得.xsd内容的程序代码,修正namespace为项目的默认namespace即可。程序44
privatestaticObjectBuilderXmlConfigParseXmlConfiguration(stringconfig) { XmlSerializerser=newXmlSerializer(typeof(ObjectBuilderXmlConfig)); StringReaderstringReader=newStringReader(config); XmlSchemaschema= XmlSchema.Read( Assembly.GetExecutingAssembly().GetManifestResourceStream( "OB_CSConfigurationTest.ObjectBuilderXmlConfig.xsd"),null); XmlReaderSettingssettings=newXmlReaderSettings(); settings.ValidationType=ValidationType.Schema; settings.Schemas.Add(schema); XmlReaderreader=XmlReader.Create(stringReader,settings); ObjectBuilderXmlConfigconfigData=(ObjectBuilderXmlConfig)ser.Deserialize(reader); returnconfigData; } |
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; usingSystem.Configuration; usingMicrosoft.Practices.ObjectBuilder; usingMicrosoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder; usingMicrosoft.Practices.EnterpriseLibrary.Common.Configuration; namespaceOB_ConfigurationTest { classProgram { staticvoidMain(string[]args) { using(FileStreamfs=newFileStream("XmlFile1.xml",FileMode.Open,FileAccess.Read)) { using(StreamReadersr=newStreamReader(fs)) { Builderbuilder=newBuilder(ObjectBuilderXmlConfig.FromXml(sr.ReadToEnd())); InputAcceptaccept=builder.BuildUp |
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; usingSystem.Configuration; usingMicrosoft.Practices.ObjectBuilder; usingMicrosoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder; usingMicrosoft.Practices.EnterpriseLibrary.Common.Configuration; namespaceOB_CSPropertyInjectionTest { classProgram { staticvoidMain(string[]args) { using(FileStreamfs=newFileStream("XmlFile1.xml",FileMode.Open,FileAccess.Read)) { using(StreamReadersr=newStreamReader(fs)) { Builderbuilder=newBuilder(ObjectBuilderXmlConfig.FromXml(sr.ReadToEnd())); InputAcceptaccept=builder.BuildUp |
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; usingMicrosoft.Practices.ObjectBuilder; namespaceOB_CSMethodInjectionTest { classProgram { staticvoidMain(string[]args) { using(FileStreamfs=newFileStream("XmlFile1.xml",FileMode.Open,FileAccess.Read)) { using(StreamReadersr=newStreamReader(fs)) { Builderbuilder=newBuilder(ObjectBuilderXmlConfig.FromXml(sr.ReadToEnd())); InputAcceptaccept=builder.BuildUp |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1282167
相关文章推荐
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 3
- Inside ObjectBuilder Part 3
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part1
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 4
- Inside ObjectBuilder Part 2
- Inside ObjectBuilder Part 2