为什么我的ninject di应用程序失败了激活脱位?
-
21-08-2019 - |
题
我是IOC/DI框架的新手。我正在尝试的第一个是NInight框架。这似乎很简单,但是我无法让我的控制台应用程序运行。我不断获得激活性的说明:
"Error activating MainWindow: the StandardProvider returned an instance of type FutureRealisticDateManager, which is not compatible with the requested service.
Using default binding from MainWindow to FutureRealisticDateManager (via StandardProvider)
declared by DateBindingModule.Load()
Activation path:
1) active request for MainWindow
from Program.Main()
using default binding from MainWindow to FutureRealisticDateManager (via StandardProvider)
declared by DateBindingModule.Load()"
我的代码很简单。这是我的程序文件...
class Program
{
static void Main(string[] args)
{
IKernel k = new StandardKernel(new DateBindingModule());
MainWindow mw = k.Get<MainWindow>();
mw.Show();
Console.ReadLine();
}
}
这是我的NININD BINDING模块...
public class DateBindingModule : StandardModule
{
public override void Load()
{
Bind<MainWindow>().To<FutureRealisticDateManager>();
}
}
这是接收注入类的类...
class MainWindow
{
private IRealisticDateManager _d;
[Inject]
public MainWindow(IRealisticDateManager dateManager)
{
_d = dateManager;
}
public void Show()
{
Console.WriteLine("*** MainWindow [" + _d.GetRealisticDate().ToString() + "] ");
}
}
这是注射的实际类...
public class FutureRealisticDateManager : TestNinject.IRealisticDateManager
{
public DateTime GetRealisticDate()
{
return DateTime.Now.AddDays(15);
}
}
最后,注射类应实现的简单接口...
public interface IRealisticDateManager
{
DateTime GetRealisticDate();
}
有人可以看到我在做什么错吗?
解决方案
它失败了,因为您的绑定不正确:
Bind<MainWindow>().To<FutureRealisticDateManager>();
FutureRealisticDataManager
不继承 MainWindow
。相反,您应该写:
Bind<IRealisticDateManager>().To<FutureRealisticDateManager>();
这告诉ninject返回 FutureRealisicDateManager
每当 IRealisicDateManager
请求。
这样打电话 k.Get<MainWindow>()
内核将注入 FutureRealisticDateManager
到构造函数。
不隶属于 StackOverflow