我是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 到构造函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top