C# Ninject:如何绑定ToMethod
我想配置我的绑定C# Ninject:如何绑定ToMethod,c#,ninject,C#,Ninject,我想配置我的绑定 Bind<DbContext>().To<HangTagVerwaltungContext>(); Bind<IUnitOfWork>() .ToConstructor( x => new UnitOfWork(true, true, x.Inject<DbContext>())); // Managers
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);
});
Bind().To();
绑定()
.ToConstructor(
x=>newunitofwork(true,true,x.Inject());
//管理者
绑定()到();
//视图模型
Bind().ToMethod(
上下文=>
{
IUnitOfWork unitOfWork=context.Kernel.Get();
ITagManager标记管理器=
context.Kernel.Get(
新参数(@“unitOfWork”,unitOfWork,false));
返回新的TagEditViewModel(tagManager,
context.Kernel.Get(),unitOfWork);
});
我的问题是,每次他为TagManager创建一个新的工作单元,而不使用我在ToMethod方法中给他的参数。我错了什么
谢谢你的帮助。
丹尼斯我认为你应该使用
构造函数参数
而不是参数
。参数名称必须与构造函数的名称匹配
然而,你为什么要这么复杂地做呢?(DI是为了让事情变得更简单,而不是更复杂。)是因为tagManager和TagEditViewModel需要相同的IUnitOfWork实例吗
如果是这样的话,还有其他方法可以实现这一点。你应该查看范围。它们用于使对象树的某些部分使用相同的实例
对于您展示的场景,您可能希望尝试.InCallScope(),但通常对于IUnitOfWork,还有一些其他功能在整个应用程序中工作得更好,例如用于web项目的.InRequestScope()或其他一些自定义范围。还有其他问题已经涉及到这一点