首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找出处理请求的程序集

如何找出处理请求的程序集
EN

Stack Overflow用户
提问于 2011-07-01 18:38:42
回答 2查看 2K关注 0票数 10

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

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

我的问题是,一旦调用该方法(通常是从部分视图),方法中是否有一种方法可以确定调用是来自程序集A还是来自程序集B而不传递任何内容?

我试着看看是否可以用HttpContext.Current.Request做任何事情,但是找不到任何有用的东西。我可以获得URI,但这仍然不能告诉我发起请求的文件位于哪个程序集中。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 19:05:16

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

但是,我同意John的意见,如果需要的话,您可能做出了一个糟糕的设计决策,

问题

你的方法是个伪君子。

它对不同的来电者说的不一样,但不公开地告诉它。

您可以看到,每个方法都定义了带有参数和返回类型的特定契约。

例如,int.Parse说它接受一个string并将其转换为一个int。如果我们想改变默认行为,我们也可以给它NumberStyles和/或IFormatProvider

我们消费者不知道int.Parse是如何实现的。因为它是static,所以我们最肯定的是它没有副作用,而且总是为相同的参数集返回相同的值。

在我后面重复这个咒语:

显式优于隐式.

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

--定义上下文是调用者的责任,而不是被调用者的.

试着简单简洁地回答以下问题:

如果方法是从程序集C调用的,那么

  • 会发生什么情况?
  • ,您将如何对它进行单元测试?如果其他开发人员在单元测试中使用此方法怎么办?
  • ,如果您重命名程序集A或B会发生什么?合并他们?further?
  • Will,您记得在happens?

之上更改此方法

如果回答上面的任何问题对你来说都是一个挑战,这是你做错了™的一个迹象。

相反你应该..。

引入参数

考虑一下方法合同。你能做什么使它充分和描述?

在一个单独的程序集中定义一个泛型(如英文)方法,不知道调用者的任何信息,并且有附加的参数,并在具体的程序集中为它定义参数填充快捷键。

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

例如,如果您需要解析方法中的URL,您可以接受string baseUrlFunc<string, string> urlResolver,这样它就可以从任何关心指定它们的程序集中使用。

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

票数 49
EN

Stack Overflow用户

发布于 2011-07-01 18:39:38

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6551954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档