2009-09-11 32 views
1

首先,我不是在谈论新的'动态'关键字n C#4.0。 :)我相信我需要走另一条路......运行时的C#动态类?

我想要一个类,在代码/设计时,从一组XML文件或文件/文件夹组合等生成的任何我可以对外部源进行更改。

这可能与C#?我知道有些设计时可能会隐藏某个类名或某些东西(即每个项目的内置属性)。

有没有更简单的方法来做到这一点?几乎像一个动态的枚举?这里就是我想要做的事:

public static class MenuItems 
{ 
} 

而且在设计时,我想的属性(或方法/场,如果这是更容易)基于XML的文件定义添加。像:

<MenuItems> 
    <Item>Homepage</Item> 
    <Item>Portfolio</Item> 
    <Item>About</Item> 
    <Item>Contact</Item> 
</MenuItem> 

然后,而在设计师我会像智能感知编码:

if (page.ToString == MenuItems.Homepage)... 
if (page.ToString == MenuItems.Portfolio)... 

通知的属性是如何在XML定义,并增加了在设计时的类?

在此先感谢!

+0

“部分”类可能有帮助。 – 2009-09-11 02:29:51

+0

您是否正在寻找类似的体验来为资源文件生成C#代码? – 2009-09-11 05:47:03

+0

@nader:是的,几乎就是那种体验!您在资源中生成一个新条目,并在设计时使用ResourceManager.MyResourceName提供它。是! – eduncan911 2009-09-12 01:29:28

回答

3

您可以使用T4 Templates来生成源代码。它得到了Microsoft的很好的支持,并被用于包括ASP.NET MVC和ADO.NET实体框架在内的多个项目。

+0

优秀点。但是,T4模板必须生成源代码。我正在寻找一个动态的解决方案。几乎实时更改生效。 – eduncan911 2009-09-11 03:24:58

+0

标记为现在的答案。似乎我想从C#中获得太多。:) – eduncan911 2009-09-13 03:02:27

+0

如果您希望您的类在运行时完全生成,那么您的代码的其余部分(引用该类的成员)是如何编译的?或者,IDE会从哪里获取显示IntelliSense提示所需的信息? – 2010-07-12 18:19:53

1

如果我可能将您的注意力转移到ASP.NET Membership ProviderWeb.sitemap,这可能会对您的实际问题有所帮助。

+0

对。那些创建设计时属性。我正在寻找已经完成了腿部工作的人。 :)花了几天摆弄我自己的解决方案,并没有解决...... :) – eduncan911 2009-09-11 02:19:17

+0

但你究竟想要做什么?我假设你想隐藏/显示基于角色的相关链接,并且还可以阻止基于角色的访问。我链接的是这样做的。如果您只是基于名称查看样式,则可以按页面或类似方式进行查看。你究竟在做什么? – 2009-09-11 02:23:40

+0

我不确定你在哪里得到我的原始问题中的“角色”或成员资格。 :)我要求在运行时创建一个基于配置文件的动态类。 T4提到的模板是它做的;但是,它必须进行编译才能提前生成该代码。我正在寻找几乎是实时的东西 - 即,对xml文件有依赖关系,如果xml更改,它会生成一个新的类版本。 – eduncan911 2009-09-12 01:28:21