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

标签 c# asp.net-mvc-3 ninject ninject.web.mvc ninject-extensions

我在一个相当大的项目中使用 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/

相关文章:

c# - 数组到列表——无法使 AddRange(IEnumerable) 工作

C# 在消息框的标题中显示 unicode 文本

c# - .net 从哪里开始

c# - 如何在C# MVC 3的 View 中循环数据库记录

javascript - 如何从代码中动态删除div标签?

asp.net-mvc - 如何在 html block 中为 MVC 3 中的 View 创建一个类?

asp.net-mvc - Ninject,如何通过调用 LoggerFactory.CreateLogger 注入(inject)通用 Logger<T>

c# - 动态双向绑定(bind)到 wpf 中的动态元素

asp.net-mvc - 我如何处理抽象出第 3 方依赖项(依赖注入(inject))?

c# - 使用依赖注入(inject)在单元测试中进行模拟