我想配置我的绑定。
Bind<DbContext>().To<HangTagVerwaltungContext>();
Bind<IUnitOfWork>()
.ToConstructor(
x => new UnitOfWork(true, true, x.Inject<DbContext>()));
// Managers
Bind<ITagManager>().To<TagManager>();
// ViewModels
Bind<TagEditViewModel>().ToMethod(
context =>
{
IUnitOfWork unitOfWork = context.Kernel.Get<IUnitOfWork>();
ITagManager tagManager =
context.Kernel.Get<ITagManager>(
new Parameter(@"unitOfWork", unitOfWork, false));
return new TagEditViewModel(tagManager,
context.Kernel.Get<INavigationService>(), unitOfWork);
});
我的问题是,每次他为TagManager创建一个新的UnitOfWork而不使用参数我在ToMethod方法中给他。我错了什么?
帮助的Thx。 丹尼斯
答案 0 :(得分:1)
我认为你应该使用ConstructorArgument
代替Parameter
。参数名称必须与构造函数名称匹配。
但是,你为什么这么复杂? (DI是为了让你更容易,而不是更复杂。)是因为你需要为tagManager和TagEditViewModel使用相同的IUnitOfWork实例吗?
如果是这种情况,还有其他方法可以实现这一目标。你应该研究范围。它们用于使对象树的某些部分使用相同的实例。
对于您展示的场景,您可能想尝试.InCallScope(),但通常对于IUnitOfWork,还有其他一些在整个应用程序中工作得更好的东西,例如.InRequestScope()用于Web项目或其他一些自定义范围。还有其他的stackoverflow问题已经涵盖了这个问题。