2009-07-04 6 views
0

Ninject отлично выглядит, поэтому я хотел бы использовать его в своем проекте. К сожалению, я все еще изо всех сил стараюсь сделать тривиальное обязательство. [Inject] атрибут компилируется нормально, но компилятор не может найти команду «Bind»:Ошибка компиляции с помощью 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

Метод 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>(); 
     } 
    } 
} 
+2

BTW StandardModule был заменен на NinjectModule в версии 2.0 –

0

Я не знаю Ninject, но при первом взгляде я вижу, что метод «Bind» не является членом класса «Bar» или их базового класса. Возможно, вам нужен какой-то экземпляр с методом «Связывание» или статическим классом со статическим методом «Связывание».

После быстрого поиска в Интернете, я думаю, что метод «Связывание» является частью экземпляра класса «InlineMethod».

3

Метод Bind определен в ModuleBase - вы должны унаследовать класс от этого или, еще лучше, от StandardModule.

Смежные вопросы