2009-07-04 3 views
0

Ninjectはすばらしく見えるので、プロジェクトで使用したいと思います。残念ながら、私はまだ最も些細な拘束をするのに苦労しています。 [インジェクト]属性は正常にコンパイルされますが、コンパイラは「バインド」コマンドを見つけることができません:Ninjectのコンパイルエラー

using System; 
using Ninject.Core; 
using Ninject.Core.Binding; 

namespace NinjectTest 
{ 
    public interface IFoo 
    { 
     void DoSomething(); 
    } 

    public class Foo : IFoo 
    { 
     public void DoSomething() 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public class Bar 
    { 
     [Inject] private IFoo theFoo; 

     public Bar() 
     { 
      Bind<IFoo>().To<Foo>(); //Compiler Error: "The name 'Bind' does not exist in the current context" 
     } 
    } 
} 

何が問題になる可能性がありますか?

答えて

5

バインドメソッドは、Ninject StandardModuleクラスのメソッドです。バインドできるようにするには、そのクラスを継承する必要があります。 - あなたはStandardModuleから、さらに良く、これからクラスを継承したりする必要があり

using System; 
using System.Collections.Generic; 
using System.Text; 
using Ninject.Core; 

namespace Forecast.Domain.Implementation 
{ 
    public class NinjectBaseModule : StandardModule 
    { 
     public override void Load() 
     { 
      Bind<ICountStocks>().To<Holding>(); 
      Bind<IOwn>().To<Portfolio>(); 
      Bind<ICountMoney>().To<Wallet>(); 
     } 
    } 
} 
+2

BTW StandardModuleが2.0のNinjectModuleに置き換えられました –

0

私はNinjectについてはわかりませんが、最初に見たところでは、 "Bind"メソッドは "Bar"クラスまたはその基本クラスのメンバーではありません。あなたは、「バインド」メソッドまたは静的な「バインド」メソッドを持つ静的クラスを使用して、いくつかのインスタンスが必要になることがあります。

「Bind」メソッドが「InlineMethod」クラスのインスタンスメンバーの一部であると私は思っています。

3

BindメソッドがModuleBaseに定義されています。ここでは

は簡単な例です。