繁体   English   中英

Ninject:如何绑定到方法

[英]Ninject: How to bind ToMethod

我想配置我的绑定。

        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的帮助。 丹尼斯

我认为您应该使用而不是Parameter ConstructorArgument 参数名称必须与构造函数的名称匹配。

但是,您为什么要这么复杂? (DI就是使您更轻松,而不是更复杂。)是否因为您需要tagManager和TagEditViewModel使用相同的IUnitOfWork实例?

如果是这样,还有其他方法可以实现。 您应该研究范围。 它们用于使对象树的某些部分使用相同的实例。

对于您显示的场景,您可能需要尝试.InCallScope(),但通常对于IUnitOfWork,还有其他一些事情在整个应用程序中更有效,例如用于Web项目或其他自定义范围的.InRequestScope()。 还有其他stackoverflow问题已经涵盖了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM