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 回答