我们来看这个例子:
Components\WinForms\XtraTreeList\CS\TreeListMainDemo
这个例子很有意思的一点是,启动就显示了,我想拿来给自己用。
我的第一个反应就是找找字符串,比如"Data Sources"
代码里没有找到,扩大范围之后发现,在一个xml文件里。
E:\work\AutoPack\Client\DX2011.2.5_src\Sources\DevExpress.DemoData.Win\DevExpress.DemoData.Win\Products\XtraTreeList\MainDemo.xml
<WinDemoModule Path="TreeListRegViewer" Group="Data Sources" Type="local:TreeListRegViewer">
<Title>Reg Viewer</Title>
<Description>This demo shows how to work with the XtraTreeList in unbound mode.</Description>
</WinDemoModule>
这里有这样一个文件,装着里面的内容
Components\Data\XtraTreeList.xml
这里我还是没有完全搞清楚。
直到把代码全都加进来,进行了跟踪:
namespace DevExpress.DXperience.Demos
protected virtual void OnLoad(object sender, System.EventArgs e) { Assembly entryAssembly = Assembly.GetEntryAssembly(); if(entryAssembly == null) return; object[] attributes = entryAssembly.GetCustomAttributes(typeof(ProductIdAttribute), false); if(attributes.Length == 0) throw new Exception("Every demo application must have the ProductId assembly attribute"); ProductIdAttribute productIdAttribute = (ProductIdAttribute)attributes[0]; MainFormRegisterDemoHelper.RegisterDemos(productIdAttribute.ProductId); FillNavBar();
注意这句:
Assembly entryAssembly = Assembly.GetEntryAssembly();
object[] attributes = entryAssembly.GetCustomAttributes(typeof(ProductIdAttribute), false);
ProductIdAttribute productIdAttribute = (ProductIdAttribute)attributes[0];
MainFormRegisterDemoHelper.RegisterDemos(productIdAttribute.ProductId);
原来是这样,是根据反射,得到了模块的一个二进制属性,
我们去找找:
TreeListMainDemo 工程 的AssemblyInfo.cs
最后一行:
[assembly: ProductId("XtraTreeList")]
原来如此。 后面就不多说了,只要你能把代码引入,跟踪,就能稿清楚了。 看到rgtister,就知道,要注册一个module