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はコンパイルできなくなります。使用を名前空間の外に配置しても、コンパイルされません。

ただし、モジュールの名前空間をMvcApplication1.Fooに変更すると、どちらの方法でも正常に機能します。

このMvcApplication1.Ninject.Modules(または単にMvcApplication1.Ninject)に名前を付けると、NinjectWebCommon.csがその参照を検出できなくなるのはなぜですか?名前空間の目的は、このようなことを防ぐことだと思いましたか?

4

1 に答える 1

2

グローバル名前空間を調べる前に、現在の名前空間とそのすべての祖先の子名前空間で名前空間検索内のステートメントを使用します。たとえば、名前空間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 に答える