objectcreator.cs
来自「语音视频功能 里面实现了基本的QQ与语音对话」· CS 代码 · 共 138 行
CS
138 行
using System;
using System.Xml;
using System.Reflection;
using System.Diagnostics;
using System.ComponentModel;
using System.Collections;
namespace gowk.GXF
{
/// <summary>
/// ObjectCreator 的摘要说明。
/// </summary>
internal class ObjectCreator
{
private XmlDocument doc;
TypeShortcutCollection types;
XmlElementParserBaseCollecion elementParsers;
MemberInvokerCollection memberInvokerCollection;
static ObjectCreator creator;
AssemblyColletion assemblys;
public ObjectCreator()
{
this.types=new TypeShortcutCollection(null);
this.elementParsers=new XmlElementParserBaseCollecion();
this.memberInvokerCollection=new MemberInvokerCollection();
this.InitializeMemberInvokers();
this.InitializeParsers();
this.InitializeShortcuts();
}
public TypeShortcutCollection TypeShortcuts
{
get{return this.types;}
}
internal XmlElementParserBaseCollecion XmlElementParsers
{
get{return this.elementParsers;}
}
public MemberInvokerCollection MemberInvokers
{
get{return this.memberInvokerCollection;}
}
public AssemblyColletion Assemblys
{
get{return this.assemblys;}
}
public static ObjectCreator Instance
{
get
{
if(creator==null)
{
creator=new ObjectCreator();
}
return creator;
}
}
public object GetRuntimeClassInstanse(string cls)
{
foreach(Assembly asm in this.Assemblys)
{
foreach(Type t in asm.GetTypes())
{
if(t.Name==cls)
{
return System.Activator.CreateInstance(t);
}
}
}
return null;
}
public object CreateInstance(XmlNode node)
{
ParserState ps=new ParserState();
if(node.Attributes["codebehind"]!=null)
{
string t=node.Attributes["codebehind"].Value;
ps.Instance=this.GetRuntimeClassInstanse(t);
ps.MemberInitializer=new MemberInitializer(ps.Instance);
}
return this.XmlElementParsers.Parse(node,ps);
/* foreach(XmlElementParserBase parser in this.XmlElementParsers)
{
System.Diagnostics.Trace.WriteLine(parser.GetType().ToString());
if(parser.CanParse(node,ps))
{
try
{
return parser.Parse(node,ps);
}
catch(System.Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
System.Diagnostics.Trace.WriteLine(ex.StackTrace);
}
}
}
throw(new NotSupportedException());
return null;*/
}
private void InitializeShortcuts()
{
}
private void InitializeParsers()
{
this.elementParsers.Add(new Filter());
this.elementParsers.Add(new CollectionParser());
this.elementParsers.Add(new MemberParser());
this.elementParsers.Add(new DotNetTypedEelementParser());
this.elementParsers.Add(new DotNetXmlAttributeParser());
}
private void InitializeMemberInvokers()
{
this.memberInvokerCollection.Add(new MemberInvokerForImage());
this.memberInvokerCollection.Add(new MemberInvoker());
}
public XmlDocument XmlDocument
{
get{return this.XmlDocument;}
set
{
this.doc=value;
this.types.XmlDocument=doc;
try
{
this.assemblys=new CodeParser().Parse(this.doc);
}
catch(System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
System.Environment.Exit(0);
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?