在运行时C#ASP.NET中为已创建的Type添加属性

时间:2010-01-25 09:40:17

标签: c# asp.net

我需要在运行时生成类及其对象。因此,看this article我创造了同样的东西。 (使用)

我将所有创建的类型存储在列表中。

但现在另一个要求是为已创建的类型添加属性。

这是因为,如果我想使用A类作为B类中的属性类型,并在C类中说两者。

我在同一篇文章上阅读了很多文章,但尚未找到解决方案

任何帮助将不胜感激。

由于


实际上,我正在开发Microsoft的LitwareHR等多租户应用程序。

这将是一个系统,管理员可以使子网站具有相同的升级管理功能(如MS sharepoint)

除工作流程外,一切都已完成!

对于要存储在表中的数据,我将其以XML格式存储..

例如:

<root tablename="UserInfo">
<column name=\"Name\">Miron</column>
<column name=\"Company\">IBM</column>
</root>"

使用XSLT在运行时创建从页面上的控件到事件,验证器到Web部件的所有内容。

在这里,当我需要使用表达式评估程序将工作流应用于它时,就会遇到挑战。

例如:If UserInfo.Name == "Miron"

所有内容都在运行时创建,因此必须将表信息检索为对象。

如果我不清楚,请告诉我!

3 个答案:

答案 0 :(得分:4)

如果存在类型,那么这将变得非常棘手;您无法将实际属性添加到现有类型,但如果*检查*值的代码使用TypeDescriptor(大多数数据绑定 )然后,您可以通过自定义PropertyDescriptor添加属性排序 - 通过实施ICustomTypeDescriptor(这要求您在构建时执行某些操作)或TypeDescriptionProvider。< / p>

两者都非常复杂,并且两者都要求你有一些方便放置额外数据(属性包)。

请注意,在4.0中,dynamic可能会有一些用处。

如果你想避免这种情况,那么只需将类型包装在看起来相似但具有额外属性的东西中。它会在保持理智的同时完成工作。

答案 1 :(得分:0)

是的,您可以按照您的描述使用Composition来执行此操作,但通常会使用继承来为现有类型添加功能。

如果没有关于如何使用这些类,将要调用它们以及如何使用它们的更多详细信息,很难回答您的问题。

答案 2 :(得分:0)

我相信你必须从单一基础派生你的课程。另外,能够:

  

使用说A类作为属性输入   B级并在C组中说两者。

如果是A的财产,你必须准备A级; A类和B类准备好成为C类的财产。

如果您可以在问题中添加更多信息,将会很有帮助。

相关问题