![](/img/trans.png)
[英]Unity equivalent for Ninject's Bind.ToMethod of IPrincipal,IIdentity
[英]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.