我面临着许多人以前面临的同样问题:可怕的没有匹配的绑定。
这是我的注册逻辑
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();
答案 0 :(得分:0)
感谢您的评论,他们给了我一个错误的提示:我错误地使用了静态构造函数,因此在调用Get&lt;&gt;时内核未正确初始化发了。
我想要实现的是单身人士。所以我换了正确的模式。这次,所有注册/绑定都发生在第一次调用Get&lt;&gt;()之前;我不再得到异常/错误。