问题标签 [reflection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
453 浏览

web-services - 识别 ASP.NET Web 服务引用

在我的日常工作中,我们有负载平衡的 Web 服务器,它们通过 Web 服务(以及最近的 WCF)与负载平衡的应用程序服务器通信。在任何给定时间,我们都有 4-6 个不同的团队能够添加新的网站或服务或使用现有服务。我们可能有大约 20-30 种不同的 Web 应用程序和相应的服务。

不幸的是,由于相互竞争的优先级、组织结构、项目时间表、财务状况等,我们无法对此进行集中控制,这真是一团糟。我们有各种可重用的服务,但有一堆是特定于前端的。

理想情况下,我们会更好地控制这种情况,我们正在努力控制它,但这需要一段时间。我们想做的一件事是更多地了解网站和应用服务器之间的所有相互关系。

我使用 Reflector 来查找程序集之间的依赖关系,但希望能够查看服务之间的流量模式。

尝试绘制 Web 服务关系的选项有哪些?在大多数情况下,我们主要讨论的是内部服务(Web 到应用程序、应用程序到应用程序、批处理到应用程序等)。在我的脑海中,我可以想到两种方法来解决它:

  • 分析任何 Web 引用的程序集。这里的缺点是并非所有内容都是 Web 参考,我不确定 WCF 连接是如何列出的。然而,这至少是寻找 80% 连接的开始。有谁知道可以进行这种分析的任何工具?就像我说的,我使用 Reflector 进行程序集引用,但找不到任何用于 Web 引用的内容。
  • 可能利用 IIS 并被动地监视进出的流量,并以某种方式找出被调用的内容和来自何处。我们正在寻找可以提供帮助的企业工具,但要实施它们还需要一段时间(并且成本很高)。但是有什么东西可以快速而廉价地提供帮助吗?特别是一个工具(AmberPoint)可以接入服务器上的 IIS 并监控入站和出站流量,添加一些特殊的调味料并开始构建流量图。非常好,但要花很多钱。

我知道,我知道,你到底是怎么搞到这个烂摊子的?打败我,只是想帮助我们控制它并摆脱它。

谢谢,马特

0 投票
9 回答
33489 浏览

c# - C# 动态事件订阅

您将如何动态订阅 C# 事件,以便给定一个 Object 实例和一个包含事件名称的 String 名称,您订阅该事件并在该事件被触发时执行某些操作(例如写入控制台)?

使用 Reflection 似乎是不可能的,如果可能的话,我想避免使用 Reflection.Emit,因为目前(对我来说)这似乎是唯一的方法。

/编辑:我不知道事件所需的代表签名,这是问题的核心

/ EDIT 2:虽然委托逆变似乎是一个好计划,但我无法做出使用此解决方案所必需的假设

0 投票
6 回答
3352 浏览

c# - C# 中反射的理由

我想知道 C# 代码中反射的适当性。例如,我编写了一个函数,它遍历给定源对象的属性并创建指定类型的新实例,然后将具有相同名称的属性值从一个复制到另一个。我创建它是为了将数据从一个自动生成的 LINQ 对象复制到另一个对象,以解决 LINQ 中多个表缺乏继承的问题。

然而,我不禁认为这样的代码真的是“作弊”,也就是说,与其使用提供的语言结构来实现给定的目的,不如说它允许您规避它们。

这种代码在多大程度上可以接受?有哪些风险?这种方法的合法用途是什么?

0 投票
9 回答
8839 浏览

reflection - 反射的用例

最近我在和一位同事谈论 C++,并感叹没有办法获取具有类字段名称的字符串并提取具有该名称的字段;换句话说,它缺乏反思。他困惑地看了我一眼,问我什么时候需要做这样的事情。

在我的脑海中,我没有给他一个好的答案,除了“嘿,我现在需要做”。所以我坐下来列出了一些我实际上用各种语言反射完成的事情。不幸的是,我的大部分示例都来自我使用 Python 进行的 Web 编程,我希望这里的人们能有更多示例。这是我想出的清单:

  1. 给定一个配置文件,其中包含
    x = "Hello World!"这样的行
    y = 5.0
    动态设置某个config对象的字段等于该文件中的值。(这是我希望我能在 C++ 中做的,但实际上做不到。)

  2. 对对象列表进行排序时,根据配置文件或 Web 请求中给定属性名称的任意属性进行排序。

  3. 在编写使用网络协议的软件时,反射允许您根据来自该协议的字符串值调用方法。例如,我编写了一个 IRC 机器人,它将转换
    !some_command arg1 arg2
    为方法调用actions.some_command(arg1, arg2)并打印该函数返回给 IRC 通道的任何内容。

  4. 当使用 Python 的 __getattr__ 函数(有点像 Ruby/Smalltalk 中的 method_missing)时,我正在使用一个包含大量统计信息的类,例如 late_total。对于每个统计数据,我希望能够添加 _percent 以将该统计数据作为我计算的总事物的百分比(例如,stats.late_total_percent)。反射使这变得非常容易。

那么,这里的任何人都可以从他们自己的编程经验中举出任何例子,当时反射很有帮助吗?下一次同事问我为什么“曾经想做那样的事情”时,我想做好更多的准备。

0 投票
10 回答
93426 浏览

c# - 在运行时更改属性的参数

我不确定是否可以在运行时更改属性的参数?例如,在程序集中,我有以下类

这是由第三方供应商提供的类,我无法更改代码。但是现在我发现上面的描述并不准确,当我将上面类的实例绑定到属性网格时,我想将“更改我”类别名称更改为其他名称。

我可以知道该怎么做吗?

0 投票
3 回答
914 浏览

.net - 获取应用程序所需的程序集列表

有没有办法将 .net 项目的所有必需程序集(不包括 .net 框架)放入准备打包到nsis作为安装文件的文件夹中?

我尝试编写一个小型控制台应用程序,该应用程序使用反射来获取 dll 列表,但一直坚持寻找一种确定 dll 是否来自 .net 框架的万无一失的方法。

答案可能是 Visual Studio 中的一个简单开关以输出所有依赖项,或者可以执行此操作的独立应用程序,或者 Nsis 的插件,或者我错过的一些关于反射的信息。

0 投票
7 回答
3568 浏览

.net - 确定程序集是否是 .NET 框架的一部分

如何从程序集名称或程序集类(或其他类似名称)中判断程序集是否是.NET框架的一部分(即 .NET 框架System.windows.Forms)?

到目前为止,我已经考虑了 PublicKeyToken 和 CodeBase 属性,但对于整个框架来说,它们并不总是相同的。

我想要此信息的原因是获取我的 EXE 文件正在使用的程序集列表,这些程序集需要在客户端计算机上,因此我可以将正确的文件打包到安装文件中,而无需使用 Visual Studio 安装系统。问题是,我不想选择任何 .NET 框架程序集,我希望它是一个自动过程,只要完成主要更新就可以轻松推出。

最终的解决方案是有一个 IsFramework 属性...... :)

0 投票
31 回答
699318 浏览

c# - 如何获取代码所在程序集的路径?

有没有办法获取当前代码所在程序集的路径?我不想要调用程序集的路径,只想要包含代码的路径。

基本上我的单元测试需要读取一些相对于 dll 的 xml 测试文件。无论测试 dll 是从 TestDriven.NET、MbUnit GUI 还是其他东西运行,我都希望路径始终正确解析。

编辑:人们似乎误解了我的要求。

我的测试库位于说

C:\projects\myapplication\daotests\bin\Debug\daotests.dll

我想得到这条路:

C:\projects\myapplication\daotests\bin\Debug\

到目前为止,当我从 MbUnit Gui 运行时,三个建议都失败了:

  • Environment.CurrentDirectory 给出c:\Program Files\MbUnit

  • System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location 给出C:\Documents and Settings\george\Local Settings\Temp\ ....\DaoTests.dll

  • System.Reflection.Assembly.GetExecutingAssembly().Location 给出与前一个相同的结果。

0 投票
5 回答
13032 浏览

c# - 在设计时不知道类名的情况下创建对象

使用反射,我需要调查一个用户 DLL 并在其中创建一个类的对象。

做它的简单方法是什么?

0 投票
9 回答
109612 浏览

c# - 如何动态评估 C# 表达式?

我想做相当于:

在 Biri 的链接之后,我得到了这个片段(修改为删除过时的方法ICodeCompiler.CreateCompiler()