对象:如何绑定方法

本文关键字:绑定 方法 何绑定 对象 | 更新日期: 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的问题