2012-05-11 8 views
0

誰もこの動作を説明することはできますか?より具体的ではなく、より具体的なものと競合する文を使用しない

私は、これは、このような名前空間でNinjectWebCommon.cs呼ばApp_Startフォルダ内のファイルを作成し、nuget経由Ninject.MVC3をインストール:

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は参照をもはや見つけられなくなるのですか?私は名前空間の目的がこのようなことを防ぐことだと思ったのですか?

+0

'Ninject.Modules'の名前が' MvcApplication1.Ninject.Modules'のネストされた名前空間の名前と同じであると考えています。 – Douglas

+0

@Douglas - 明らかに、私はMvcApplication1.Ninject.Modulesとして認定しているので、これは矛盾しないと考えられます。 –

答えて

2

現在の名前空間とそのすべての祖先の子名前空間での名前空間の検索で、グローバル名前空間を調べる前に文を使用する。例えば。名前空間MvcApplication1.Aを持っている場合は、このための

using A 

代わりの

using MvcApplication1.A 

を書くことができ、あなたの例では、

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

として、コンパイラによって解釈されますがそれを強制することができますコンパイラは次のようにグローバル名前空間のみを検索します。

namespace MvcApplication1.Ninject.Modules { 
    using global::Ninject.Modules 
    ... 
} 
+0

これは、NinjectWebCommonが別の(ただし関連する)名前空間の別のクラスに 'Using Ninject.Modules; 'を追加したときに、なぜNinjectWebCommonがその参照を突然見つけることができないのか説明していません。 –

+0

MvcApplication1.Ninjectを暗黙的に追加する新しい名前空間MvcApplication1.Ninject.Modulesを追加すると、NinjectがMvcApplication1.Ninjectを使用して同じことになります。 –

関連する問題