【问题标题】:Creating a list of static objects in asp.net在 asp.net 中创建静态对象列表
【发布时间】:2012-02-25 00:32:28
【问题描述】:

是否可以检索在当前 appdomain 中创建的所有静态对象?我正在尝试为现有的 asp.net 网站编写一个调试页面。它在基于单例对象的缓存中保存了大量信息。

谢谢

【问题讨论】:

    标签: c# asp.net static appdomain


    【解决方案1】:

    以下是帮助您入门的内容:

    IList<Assembly> assemblies = AppDomain.CurrentDomain.GetAssemblies();
    
    List<Type> allTypes = new List<Type>();
    
    foreach (Assembly assembly in assemblies)
    {
        var types = from t in assembly.GetTypes()
                    where bootStrapperType.IsAssignableFrom(t)
                        && !t.IsInterface && !t.IsAbstract
                    select t;
    
        allTypes.AddRange(types);
    }
    
    foreach(Type type in allTypes)
    {
        var fieldsPublic = type.GetFields(BindingFlags.Public|BindingFlags.Static);
        foreach(var field in fieldsPublic)
        {
           var nameAndValue = field.Name + " = " + field.GetValue(null);
           // Do something
        }
        var fieldsPrivate = type.GetFields(BindingFlags.Private|BindingFlags.Static);
        foreach(var field in fieldsPrivate)
        {
           var nameAndValue = field.Name + " = " + field.GetValue(null);
           // Do something.
        }
    }
    

    【讨论】:

    • 谢谢 - 这为我指明了正确的方向。为了从结果中删除常量,我还需要检查 field.IsLiteral
    【解决方案2】:

    我之前遇到过thisthis。您需要知道包含这些静态字段的类型。但是您可以遍历所有已加载的程序集,例如 this 并检查每种类型。

    【讨论】:

    • 虽然理论上这可以回答这个问题(顺便说一句,它没有回答),it would be preferable 在这里包含答案的基本部分,并提供参考链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多