有没有办法从特定的命名空间中获取对象?或许与System.Reflections?我希望将所有对象从ITestType命名空间中的类型Test.TestTypes作为对象获取,以便我有一个实例列表,TestType1, TestType2, TestType3依此类推.有人能帮我吗?我不知道在哪里搜索.
我需要以编程方式获取List给定命名空间中的所有类.我怎样才能在C#中实现这个(反射?)?
目标:
我正在尝试创建一个权限页面,该页面根据整个应用程序中webforms中的控件为角色分配权限.我正在尝试编写将为给定页面创建一系列控件的代码.页面名称将作为字符串传递.
以下这篇文章与我正在寻找的内容非常相似,尽管它是为VB.NET中的Windows窗体应用程序编写的.我希望在C#中找到一个适用于webforms的解决方案. http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/
下一篇文章似乎也是我正在寻找的但是在文件中查找的建议不起作用,因为我希望代码更通用并扩展,因为我将页面或控件添加到表单而不是硬编码: Get程序集中每个WebForm上的控件列表
大概的概念:
我的想法是让用户从下拉列表中选择一个角色.然后,用户将从下拉列表中选择应用程序中的页面.然后,SelectedIndexChanged将查询所选页面的webform类,并生成一个网格,列出该页面上控件的名称以及可以分配的另一个权限下拉列表.当用户完成控件和权限的编辑后,他们会单击"保存",信息将保存到数据库中.
当表单经过身份验证的用户加载页面时,该页面将查询数据库以获取每个控件的权限,并根据用户的角色和权限将具有分配给该控件的只读,编辑或不可见状态.我的最终目标是让最终用户管理员能够管理应用程序中的权限,而不是拥有广泛的角色和权限集,或者必须根据客户的需求进行自定义的一次性工作.请注意,这将是我尝试访问其他页面上的控件的唯一页面.
我试图列出ASP.NET项目或命名空间中的所有控件,因为在我的情况下,我当前项目中只有一个命名空间.我找到了大量列出当前表单控件的示例,但没有找到任何可以在站点范围内执行此操作的代码.我也能够列出我拥有的所有webform类: 如何在命名空间中获取所有类?
但似乎你不能再去查询那个类定义的控件 - 如果有人可以解决这个问题,我想这会让我进入下一步.
我试过的:
一种是实例化webform本身,然后以编程方式循环遍历控件.这至少不像我做的那样成功.Webform1 wf = new Webform1(); 我还尝试添加一个构造函数和一个方法,然后循环遍历控件.
我也尝试通过Activator.CreateInstance实例化webform类我尝试按照此页面上的示例操作: 实例化具有运行时确定类型的对象
例:
Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName));
foreach (Control c in o.Controls)
lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>";
Run Code Online (Sandbox Code Playgroud)
这也没有成功.它确实编译但我得到一个控制计数为零,当然没有控制.
我试图避免的最后一种方法是在我的应用程序中收集控件的手动方法( 在生产中应该是静态的),然后仍然拥有权限页面,管理员将权限分配给那一点.
最后:
任何指示我能够动态微调控件权限的正确方向的帮助都将非常受欢迎,即使这包括查看处理权限的不同方式.
如何获取命名空间中的所有控件?例如,我想获取System.Windows.Forms中的控件:TextBox,ComboBox等.
我有一个仅包含类名称的字符串列表。我需要使用 Activator 创建它们的实例,但它们都可以位于不同的命名空间中。类将来可以移动到另一个名称空间中,因此我无法对其进行硬编码。
我想要一个这样的类实例字典:
Dictionary<string, class> dictionary = new Dictionary<string, class>();
// Load all classes of a namespace
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "GameStates");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
gameStateList.Add(typelist[i].Name, typelist[i]);
}
dictionary["ClassA"].MethodB(5); // Doesn't work
Run Code Online (Sandbox Code Playgroud)
我怎么能那样做?