对象:如何绑定方法
本文关键字:绑定 方法 何绑定 对象 | 更新日期: 2023-09-27 17:54:55
我想配置我的绑定。
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,而不是使用我在tommethod方法中给他的参数。我错在哪里?
谢谢你的帮助。丹尼斯
我认为你应该使用ConstructorArgument
而不是Parameter
。参数名称必须与构造函数的名称匹配。
但是,为什么你做的这么复杂?(DI是让事情变得更简单,而不是更复杂。)这是因为您需要相同的IUnitOfWork实例为tagManager和TagEditViewModel?
如果是这种情况,还有其他方法可以实现这一点。你应该研究一下范围。它们用于使对象树的某些部分使用相同的实例。
对于你展示的场景,你可能想要尝试。incallscope(),但通常对于IUnitOfWork有其他的东西在整个应用程序中工作得更好,像。inrequestscope()为web项目或一些其他自定义范围。还有其他关于stackoverflow的问题