0

Ninject は良さそうなので、自分のプロジェクトで使用したいと思います。残念ながら、私はまだ最も些細なバインディングを行うのに苦労しています。[Inject] 属性は問題なくコンパイルされますが、コンパイラは「Bind」コマンドを見つけることができません。

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"
        }
    }
}

ここで何がうまくいかないのでしょうか?

4

3 に答える 3

5

Bindメソッドは、Ninject 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>();
        }
    } 
}
于 2009-07-04T11:29:40.567 に答える
3

Bind メソッドは ModuleBase で定義されています。クラスはこのモジュールから継承するか、さらには StandardModule から継承する必要があります。

于 2009-07-04T11:32:18.190 に答える
0

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

簡単にグーグルで調べたところ、「Bind」メソッドは「InlineMethod」クラスのインスタンスメンバーの一部であると思います。

于 2009-07-04T11:21:40.237 に答える