0

谁能解释这种行为以及解决方案是什么?

我通过 nuget 安装了 Ninject.MVC3,这会在 App_Start 文件夹中创建一个名为 NinjectWebCommon.cs 的文件,其命名空间如下:

namespace MvcApplication1.App_Start {
    ...
    using Ninject;
    using Ninject.Web.Common;
    ...
}

现在,我想创建一个 NinjectModule,但在识别 Ninject 命名空间时遇到了一些问题。

namespace MvcApplication1.Ninject.Modules {
    using Ninject.Modules
    ...
}

一旦我在模块中添加 using 语句,NinjectWebCommon.cs 就无法再编译。如果我将 using 放在命名空间之外,它仍然无法编译。

但是,如果我将模块的命名空间更改为 MvcApplication1.Foo,那么无论哪种方式都可以正常工作。

为什么命名这个 MvcApplication1.Ninject.Modules(甚至只是 MvcApplication1.Ninject)会导致 NinjectWebCommon.cs 不再找到它的引用?我认为命名空间的目的是防止这种事情发生?

4

1 回答 1

2

在查看全局命名空间之前,在当前命名空间及其所有祖先的子命名空间中搜索命名空间中的 using 语句。例如,如果你有一个命名空间 MvcApplication1.A 你可以写

using A

代替

using MvcApplication1.A

因此,您的示例被编译器解释为

namespace MvcApplication1.Ninject.Modules {
    using MvcApplication1.Ninject.Modules
    ...
}

您可以强制编译器仅在全局命名空间中查找,如下所示:

namespace MvcApplication1.Ninject.Modules {
    using global::Ninject.Modules
    ...
}
于 2012-05-11T22:57:48.640 回答