【问题标题】:Retrieve class name hierarchy as string以字符串形式检索类名层次结构
【发布时间】:2010-04-09 17:21:07
【问题描述】:

我们的系统复杂性已经上升到我们需要使与数据库中的客户端相关联的权限名称更加具体。在客户端中,权限是从静态类引用的,因为许多客户端功能取决于每个用户拥有的权限,并且角色有很多种类。我以this post 为例,但我正在寻找更具体的用例。以这个引用为例,其中 PermissionAlpha 将是一个 const 字符串:

return HasPermission(PermissionNames.PermissionAlpha);

这很好,除了现在事情变得越来越复杂,类的结构是这样的:

public static class PermissionNames
{
    public static class PermissionAlpha
    {
        public const string SubPermission = "PermissionAlpha.SubPermission";
    }
}

我正在尝试找到一种在这个新设置中引用 PermissionAlpha 的简单方法,它的作用类似于上面的第一个声明。做到这一点的唯一方法是像下面的示例中那样使用类名的值吗?我正在尝试将所有名称保存在一个可以在应用程序中的任何位置引用的位置。

public static class PermissionAlpha
{
    public static string Name { get { return typeof(PermissionAlpha).Name; } }
}

** 编辑 ** - 添加缺少的权限名称。

【问题讨论】:

    标签: c#


    【解决方案1】:

    对于您的项目规模而言,这可能对您来说变化太大,但我们已将所有业务对象拆分为部分类。一个用于手动更改,一个用于生成。在代码生成期间,我们将权限密钥从我们的“单一事实来源”写入部分类的生成端。我们使用一组类作为我们的事实来源和 CodeDom 来生成,但您也可以使用数据库作为来源并使用 T4、CodeSmith 或其他人来生成。

    【讨论】:

    • 我认为对于这个特殊的变化,考虑到时间限制,这会有点困难。但是,我们希望尽快移植到 Silverlight,这绝对是值得考虑的事情。是否有任何示例说明如何设置?有点难以概念化。
    • 在进行更多研究后,我将继续接受这一点。切换到这个模型看起来可能是一个前进的好方法。谢谢!
    • 酷!一旦你开始生成代码,你就再也不想回去了。
    【解决方案2】:

    为什么不在有问题的类上创建可反射属性?这样就可以添加所需的所有额外信息。我在我的博客文章中提供了一种占卜属性的方法,标题为:

    C# Using Extended Attribute Information on Objects

    HTH

    【讨论】:

    • 我已经考虑过了,我们确实为代码中的其他示例执行此操作,特别是枚举,我宁愿只引用类名以避免在 XAML 中使用这么多 ValueConverters 并引用和使用 GetDescriptionAttibute () 在我需要引用权限的每个地方(这比枚举更常见)。
    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多