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()或其他一些自定义范围。还有其他问题已经涉及到这一点