Ninject:没有匹配的绑定

时间:2017-12-05 20:21:15

标签: ninject mvvm-light

我面临着许多人以前面临的同样问题:可怕的没有匹配的绑定。

这是我的注册逻辑

    static Bootstrapper()
    {
        Container = new StandardKernel();

        var dialogService = new DialogService();
        var mainWindow = new MainWindow(Messenger.Default, dialogService);
        dialogService.Intialize(mainWindow.DialogContainer);

        Container.Bind<MainWindow>().ToConstant(mainWindow);
        Container.Bind<IDialogService>().ToConstant(dialogService);
        Container.Bind<ILogger>().ToMethod((ctx) => LogManager.GetLogger("Main"));
        Container.Bind<IMessenger>().ToConstant(Messenger.Default);
        Container.Bind<IEntityService>().To<EntityService>();
        Container.Bind<EntityMasterDetailViewModel>().To<EntityMasterDetailViewModel>().InSingletonScope();
        Container.Bind<MainViewModel>().To<MainViewModel>().InSingletonScope();
    }

在解析EntityMasterDetailViewModel

时会出现问题
    public EntityMasterDetailViewModel(
        IDialogService dialog,
        IEntityService service)
    {
        _service = service;
        _dialog = dialog;
    }

这是该类中唯一的构造函数。我也消除了使用多个容器的可能性(使用只读静态)。

我无法弄清楚班级注册有什么问题。它的所有依赖都已在容器中定义。

现在我会收到以下错误:

  Error activating IDialogService
  No matching bindings are available, and the type is not self-bindable.
  Activation path:
  2) Injection of dependency IDialogService into parameter dialog of 
  constructor of type EntityMasterDetailViewModel
  1) Request for EntityMasterDetailViewModel

有人能发现任何错误吗?

干杯,

编辑1

我可以解决这两个依赖关系:Container.Get<IDialogService>()Container.Get<IEntityService>()都返回正确的实例。所以它必须是我注册EntityMasterDetailViewModel的方式。我尝试了一些替代方案,但都没有效果:

     Container.Bind<EntityMasterDetailViewModel>().ToSelf().InSingletonScope();
     Container.Bind<EntityMasterDetailViewModel>().ToMethod(_ => Container.Get<Entity<asterDetailViewModel>()).InSingletonScope();

1 个答案:

答案 0 :(得分:0)

感谢您的评论,他们给了我一个错误的提示:我错误地使用了静态构造函数,因此在调用Get&lt;&gt;时内核未正确初始化发了。

我想要实现的是单身人士。所以我换了正确的模式。这次,所有注册/绑定都发生在第一次调用Get&lt;&gt;()之前;我不再得到异常/错误。