2009-07-04 3 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 클래스의 메서드입니다. 바인딩 할 수 있으려면 해당 클래스를 상속해야합니다.

다음은 간단한 예입니다 :

바인드 방법은 ModuleBase에 정의되어
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"메서드 또는 정적 "Bind"메서드가있는 정적 클래스로 인스턴스를 만들어야합니다.

빠른 검색 후 "바인딩"메서드는 "InlineMethod"클래스의 인스턴스 멤버 중 일부라고 생각합니다.

3

- 당신은 StandardModule을에서, 더 나은,이에서 클래스를 상속 또는한다.