C# 如何找出哪个程序集处理了请求

C# 如何找出哪个程序集处理了请求,c#,asp.net,asp.net-mvc,assemblies,httprequest,C#,Asp.net,Asp.net Mvc,Assemblies,Httprequest,我有一个Web解决方案,它包含两个项目(a和B),其中B引用a 在A中,我有一个Html扩展方法,显然可以从A或B调用 我的问题是,一旦调用了该方法(通常从局部视图),该方法内部是否有一种方法可以确定调用是来自Assemblya还是AssemblyB,而不向其传递任何信息 我试图查看是否可以使用HttpContext.Current.Request执行任何操作,但找不到任何有用的内容。我可以获取URI,但这仍然不能告诉我发起请求的文件所在的程序集 感谢您的回答-该方法返回一个字符串,该字符串来

我有一个Web解决方案,它包含两个项目(aB),其中B引用a

A中,我有一个
Html
扩展方法,显然可以从AB调用

我的问题是,一旦调用了该方法(通常从局部视图),该方法内部是否有一种方法可以确定调用是来自Assemblya还是AssemblyB,而不向其传递任何信息

我试图查看是否可以使用
HttpContext.Current.Request
执行任何操作,但找不到任何有用的内容。我可以获取URI,但这仍然不能告诉我发起请求的文件所在的程序集



感谢您的回答-该方法返回一个字符串,该字符串来自string.resx文件,我为每个程序集提供了一个该文件。这就是为什么我需要知道访问哪个文件才能返回字符串。由于每个程序集在启动时都会“注册”,如果我添加一个新的程序集,我的方法不会改变,因为它只会查找程序集。事实上,我的整个项目不会改变。我现在不引入另一个参数的原因是b/c,这将意味着巨大的变化,我真的看不到它的好处。虽然我明白你的观点,并且大体上同意你的观点,但我认为在我的例子中,方法并不是返回不同的东西,它只是根据程序集获取正确的资源文件。

检查
HttpContext.Current.Application.GetType().assembly

作为SLaks,你可以检查
HttpContext.Current.Application.GetType().Assembly

但是,我同意John的意见,即如果需要,您可能做出了错误的设计决策

问题 你的方法是伪君子。
它会对不同的来电者说不同的话,但不会公开说出来

您可以看到,每个方法都定义了一个带有参数和返回类型的特定契约。
例如,
int.Parse
表示它接受一个
字符串
,并将其转换为
int
。如果我们想更改默认行为,我们还可以给它
numberstyle
和/或
IFormatProvider

我们这些消费者不知道
int.Parse
是如何实现的。因为它是
静态的
,所以我们非常希望它没有副作用,将始终为同一组参数返回相同的值

跟着我重复这个咒语:

显式优于隐式。

如果发现
int.Parse
以某种方式分析代码并根据调用的位置更改其行为,您可能会非常生气

定义上下文是呼叫方的责任,而不是被呼叫方的责任。

试着对以下问题给出简单明了的答案:

  • 如果从程序集C调用该方法,会发生什么
  • 您将如何对其进行单元测试?如果其他开发人员在单元测试中使用这种方法呢
  • 如果重命名程序集A或B,会发生什么情况?合并它们?把他们进一步分开
  • 如果发生上述情况,您是否记得更改此方法?
如果回答上述任何一个问题对你来说都是一个挑战,那就是你做错了™.

相反,你应该

引入一个参数 考虑一下合同的方法。你能做些什么使它完整和描述性

在一个单独的程序集中定义一个泛型(如英语)方法,不知道调用方的任何信息,并且有额外的参数,,并在具体的程序集中为其定义参数填充快捷方式

最好这些参数也不知道有关程序集的任何信息

例如,如果需要解析方法中的URL,可以接受
string baseUrl
Func urlResolver
,因此它可能可用于任何需要指定这些URL的程序集


在最坏的情况下,可以使用可能的调用方上下文定义枚举并将其传递给方法。这将使您的设计问题显式化,而不是隐式化。明显的问题总是比隐藏的问题好,尽管比没有问题更糟。

为什么要这样做?这听起来是个坏主意。如果添加另一个程序集怎么办?如果将功能从一个程序集移动到另一个程序集怎么办?也许你应该给这个方法添加一个参数,并在两次调用之间设置不同的参数。@John:如果你不介意的话,我对你说的内容进行了扩展。这个答案太好了,我不仅喜欢这个问题,而且还打算在博客上介绍你的答案。在今后的几年里,我都会参考这个答案。@John:我试着让这个答案对我有帮助,你的好话让我很高兴。谢谢。抱歉,从未发布过链接:我同意答案、评论和博客条目,请确保博客条目是我来到这里的原因,而且我不是唯一一个,可能:-)来自upvote@TheBlastOne评论的人:)