首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.Net MVC控制器命名空间数组

ASP.Net MVC控制器命名空间数组
EN

Stack Overflow用户
提问于 2009-04-06 14:26:38
回答 2查看 2.9K关注 0票数 9

我注意到MapRoute扩展包含一个重载,该重载接受名为“string[]”的命名空间参数。我读到了Google为我准备的东西,据推测,这是为了帮助框架在其他地方找不到的控制器。

我做了一些尖峰测试,并尝试将控制器放置在奇怪的位置。我将一个放在Scripts文件夹中;我甚至在具有独立根命名空间的单独程序集中构建了一个。

没有在名称空间参数中放置任何内容,一切都运行得很好。如果我只将其中一个命名空间放在命名空间参数中,它仍然会找到我所有的控制器。我认为它可能会使用该数组来消除相似命名的控制器之间的歧义,但这也没有发生。MyProj.Controllers中的一个HomeController和SomeOtherName.Stuff中的一个仍然会发生冲突。

所以我的问题是,这个参数被弃用了吗?或者它仍然以某种我尚未察觉的方式被使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-06 19:37:46

好的,经过进一步的测试,我发现它不是一个过滤器,确切地说,但它也是一个过滤器。即使你部分错了,我还是给了你“答案”的信任。

所以,它毕竟表现得像我想的那样,也就是说它消除了歧义。基本上,逻辑流程是这样的:

  • 在_cache中查找与命名空间数组中的命名空间匹配的命名空间
    • 如果找到,则查找具有正确名称的控制器
    • --如果找到,则返回
    • --如果没有找到,则返回通常会搜索的任何其他位置

  • 如果找不到,请在任何地方搜索lese

因此,简而言之,我认为名称空间数组用于消除歧义的想法是正确的。我在这方面的第一个测试失败的原因是它只做了一个完美的匹配,并且我犯了一个错误,只使用了程序集中的根n/s (换句话说,MyRoot而不是MyRoot.Controllers)。

命名空间允许在两个不同的命名空间中有一个HomeController,并根据url或参数以不同的方式匹配它们。

票数 5
EN

Stack Overflow用户

发布于 2009-04-06 14:52:13

否,该值未被弃用。它在DefaultControllerFactory.cs中使用。请注意,如果提供了该值,它将完全替换搜索到的标准名称空间。如果未提供该参数,则搜索的名称空间由以下内容确定:

代码语言:javascript
运行
复制
HashSet<string> nsDefaults = new HashSet<string>(ControllerBuilder.DefaultNamespaces, StringComparer.OrdinalIgnoreCase);

提供该参数时,您提供的列表将替换此值。

在这两种情况下,DefaultControllerFactory都会调用:

代码语言:javascript
运行
复制
GetControllerTypeWithinNamespaces(controllerName, nsDefaults);

...with列表,可以是您提供的列表,也可以是默认列表。因此很明显,该值是受支持的。

当您查看ControllerTypeCache中的源代码时,您可以看到名称空间值的真正用途:它不会导致控制器工厂查找否则不会查找的位置;相反,它是一个过滤器。换句话说,它阻止了默认的控制器工厂查找和命名空间,否则它将搜索控制器。

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

https://stackoverflow.com/questions/721700

复制
相关文章

相似问题

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