Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 为什么我的Ninject DI应用程序会因ActivationException而失败?_Dependency Injection_Inversion Of Control_Ninject - Fatal编程技术网

Dependency injection 为什么我的Ninject DI应用程序会因ActivationException而失败?

Dependency injection 为什么我的Ninject DI应用程序会因ActivationException而失败?,dependency-injection,inversion-of-control,ninject,Dependency Injection,Inversion Of Control,Ninject,我不熟悉IoC/DI框架。我正在尝试的第一个是Ninject框架。这看起来很简单,但我无法让我的控制台应用程序运行。我一直收到一个ActivationException声明: "Error activating MainWindow: the StandardProvider returned an instance of type FutureRealisticDateManager, which is not compatible with the requested service. Us

我不熟悉IoC/DI框架。我正在尝试的第一个是Ninject框架。这看起来很简单,但我无法让我的控制台应用程序运行。我一直收到一个ActivationException声明:

"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();
    }
}
这是正在注入的实际类

public class FutureRealisticDateManager : TestNinject.IRealisticDateManager
{
    public DateTime GetRealisticDate()
    {
        return DateTime.Now.AddDays(15);
    }
}
最后是注入类应该实现的简单接口

public interface IRealisticDateManager
{
    DateTime GetRealisticDate();
}

有人知道我做错了什么吗?

它失败了,因为您的绑定不正确:

Bind<MainWindow>().To<FutureRealisticDateManager>();
这告诉Ninject在请求
IRealisicDateManager
时返回
FutureRealisicDateManager


这样,当您调用
k.Get()
内核时,就会将
FutureRealisticDateManager
注入构造函数。

啊,这很有意义。谢谢Mokosh!
public interface IRealisticDateManager
{
    DateTime GetRealisticDate();
}
Bind<MainWindow>().To<FutureRealisticDateManager>();
Bind<IRealisticDateManager>().To<FutureRealisticDateManager>();