Ninject的编译错误

时间:2009-07-04 11:09:08

标签: c# ninject

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

这里可能出现什么问题?

3 个答案:

答案 0 :(得分: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>();
        }
    } 
}

答案 1 :(得分:3)

Bind方法在ModuleBase中定义 - 您应该从此继承您的类,或者更好地从StandardModule继承。

答案 2 :(得分:0)

我不知道Ninject,但是我首先看到,“Bind”方法不是“Bar”类或其基类的成员。可能你需要一些带有“Bind”方法的实例或带有静态“Bind”方法的静态类。

在快速谷歌搜索之后,我认为“Bind”方法是“InlineMethod”类的实例成员的一部分。