如何找出处理请求的程序集
我有一个Web解决方案,它包含两个项目( A和B ), B引用A。
在A我有一个Html
扩展方法,显然可以从A或B调用。
我的问题是,一旦调用该方法(通常是从局部视图),方法内部是否有一种方法可以确定调用是来自程序集A还是程序集B而不传递任何内容?
我试着看看我是否可以用HttpContext.Current.Request
做任何事情,但找不到任何有用的东西。 我可以获取URI,但仍然没有告诉我发起Request的文件位于哪个程序集中。
谢谢你的答案 – 该方法返回一个字符串,字符串来自string.resx文件,我有一个每个程序集。 这就是为什么我需要知道要访问哪个文件以返回字符串。 由于每个程序集在启动时“注册”自己,如果我添加一个新的程序集,我的方法不会改变,因为它只会查找程序集。实际上我的整个项目不会改变。 我之前没有引入另一个参数的原因是b / c它将意味着大量的变化,老实说我没有看到好处。 虽然我看到你的观点并且我普遍同意它,但我认为在我的情况下,并不是该方法返回不同的东西,它只是根据程序集获取正确的资源文件。
正如SLaks所指出的 ,你可以检查HttpContext.Current.Application.GetType().Assembly
。
但是我同意约翰在评论中说如果你需要这个, 你可能做出了糟糕的设计决定 。
问题
你的方法是伪君子。
它与不同的呼叫者说话不同,但不公开告诉它。
你看,每个方法都定义了一个带有参数和返回类型的约定。
例如, int.Parse
说它需要一个string
并将其转换为int
。 如果我们想要更改默认行为,我们也可以给它NumberStyles
和/或IFormatProvider
。
我们消费者不知道如何实现int.Parse
。 因为它是static
,我们当然希望它没有副作用,并且总是会为同一组参数返回相同的值 。
在我之后重复这个口头禅:
显式优于隐式。
如果你发现int.Parse
以某种方式分析你的代码并根据它的调用位置改变它的行为,你可能会非常生气。
调用者负责定义上下文,而不是被调用者。
尝试给出以下问题的简单而简洁的答案:
如果回答上述任何问题显然对您构成挑战,那就表明您正在做错了。
相反,你应该……
介绍一个参数
想想方法合同。 你能做些什么才能让它变得完整和具有描述性?
在单独的程序集中定义一个通用(如英语)方法,该程序集不知道有关调用程序的任何内容并具有其他参数 ,并在具体程序集中为其定义参数填充快捷方式。
最好是这些参数对组件也不了解。
例如,如果您需要解析方法中的URL,则可以接受string baseUrl
或Func
以便可以从任何关注指定它们的程序Func
使用它。
在最坏的情况下,您可以使用可能的调用者上下文定义枚举并将其传递给方法。 这将使您的设计问题变得明确,而不是隐含。 明显的问题总是比隐藏的问题更好,虽然比没有问题更糟糕。
检查HttpContext.Current.Application.GetType().Assembly
上述就是C#学习教程:如何找出处理请求的程序集分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/960140.html