Dependency injection 将动态参数传递给Ninject(或者任何容器)中的factory/composition根目录

Dependency injection 将动态参数传递给Ninject(或者任何容器)中的factory/composition根目录,dependency-injection,ninject,ioc-container,Dependency Injection,Ninject,Ioc Container,这里有一个例子 foreach (var doc in documents) { var processor = this.factory.Create(); processor.Process(doc); } 工厂内部调用内核.Get() 我希望所有文档处理器的依赖项的生命周期都“限定”到此合成根。此配置似乎符合我的要求: kernel.Bind<IEntityContext>().To<EntityContext>().InCallScope();

这里有一个例子

foreach (var doc in documents)
{
    var processor = this.factory.Create();
    processor.Process(doc);
}
工厂内部调用
内核.Get()

我希望所有文档处理器的依赖项的生命周期都“限定”到此合成根。此配置似乎符合我的要求:

kernel.Bind<IEntityContext>().To<EntityContext>().InCallScope();

谢谢

使用Ninject 3.0.0,您可以

kerne.Get<IProcessor>(new ConstructorArgument("doc", doc, true));
kerne.Get(新的构造函数参数(“doc”,doc,true));

但在我看来,将doc作为处理器的依赖项似乎仍然存在设计缺陷。最好只创建一次处理器,并通过将文档传递给Process方法将其重用于多个文档。我仍然不明白这有什么问题,因为这个问题没有显示实际的问题。

使用Ninject 3.0.0,您可以这样做

kerne.Get<IProcessor>(new ConstructorArgument("doc", doc, true));
kerne.Get(新的构造函数参数(“doc”,doc,true));

但在我看来,将doc作为处理器的依赖项似乎仍然存在设计缺陷。最好只创建一次处理器,并通过将文档传递给Process方法将其重用于多个文档。我仍然不明白这有什么问题,因为问题没有显示实际问题。

对不起,我不太明白你的问题是什么。但是在方法调用中传递文档的第一个示例通常应该是首选的方式。嗨,Remo,感谢您目前在Ninject上所做的所有工作!我的意思是:在第二种情况下,我希望文档处理程序的所有依赖项都能够接收正确的IDocument。这有意义吗?据我从你的博文中了解到的,把医生当作依赖者看待是不对的。它更像是处理器的输入值,因此第一个选项似乎更适合。但是在不知道整个问题的情况下,很难给出答案。好吧,这样说怎么样:有没有办法说每个新的IDocumentProcessor(及其依赖项)都应该获得一个新的、共享的EntityContext,而不是改变应用程序中所有EntityContext的生存期范围?对不起,我不太明白你有什么问题。但是在方法调用中传递文档的第一个示例通常应该是首选的方式。嗨,Remo,感谢您目前在Ninject上所做的所有工作!我的意思是:在第二种情况下,我希望文档处理程序的所有依赖项都能够接收正确的IDocument。这有意义吗?据我从你的博文中了解到的,把医生当作依赖者看待是不对的。它更像是处理器的输入值,因此第一个选项似乎更适合。但是,在不知道整个问题的情况下,很难给出答案。好吧,这样说怎么样:有没有办法说每个新的IDocumentProcessor(及其依赖项)都应该获得一个新的、共享的EntityContext,而不是改变应用程序中所有EntityContext的生存期范围?抱歉,Remo,我看看能不能改进这个问题。我同意注入文档看起来是错误的,但我正在尝试创建一个用于处理文档的注入“上下文”。问题的核心是“我希望所有文档处理器的依赖项的生命周期都“限定”到这个组合根”。我假设ConstructorArgument将只注入处理器,而不是注入其依赖项?Pete通过指定构造函数参数将被继承,它将被传递给子级。抱歉,Remo,我将看看是否可以改进这个问题。我同意注入文档看起来是错误的,但我正在尝试创建一个用于处理文档的注入“上下文”。问题的核心是“我希望所有文档处理器的依赖项的生命周期都“限定”到这个组合根”。我假设ConstructorArgument将只注入处理器,而不是注入其依赖项?Pete通过指定构造函数参数将被继承,它将被传递给子级。