gpt4 book ai didi

c# - 使用 Ninject Dependency Creator 和 Event Broker 进行生命周期管理

转载 作者:行者123 更新时间:2023-11-30 17:07:40 26 4
gpt4 key购买 nike

我在一个相当大的项目中使用 Ninject,并希望利用 Dependency Creation和事件代理扩展。

Dependency Creation 自述文件给出了以下示例(尽管我相信 InCreatorScope 现在可能已重命名为 InDependencyCreatorScope)

this.kernel.Bind<IParent>().To<Parent>();
this.kernel.DefineDependency<IParent, Dependency>();
this.kernel.Bind<Dependency>().ToSelf().InCreatorScope();

此示例通过 ParentDependency 之间的容器创建依赖关系,而它们彼此之间没有“硬”引用。这促进了组件之间的松散耦合,并允许我使用事件代理在 Parent 上发布事件并在 Dependency 上订阅它,而无需显式连接事件处理程序。

我的问题是:如果 Dependency 被注入(inject)到其他对象中并且我希望它具有标准激活的 RequestScope 生命周期怎么办?如何声明我想对标准激活使用请求范围,但在与 Parent 一起创建时使用依赖创建者范围?

最佳答案

您可以使用条件绑定(bind):

// dedine dependency as before
this.kernel.Bind<Dependency>().ToSelf().When(r => r.Parameters.OfType<DependencyCreationParameter>().Any()).InDependencyCreatorScope();
this.kernel.Bind<Dependency>().ToSelf().When(r => !r.Parameters.OfType<DependencyCreationParameter>().Any()).InRequestScope();

但通常当你有一个基于事件代理的解决方案时,你可以简单地在事件代理中使用 OnActivation 重载注册创建的对象,这使得创建复杂范围更容易。

关于c# - 使用 Ninject Dependency Creator 和 Event Broker 进行生命周期管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com