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"
}
}
}
这里可能出现什么问题?
答案 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”类的实例成员的一部分。