使用Ninject Dependency Creator和Event Broker进行终身管理

时间:2013-01-15 20:42:39

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

我在一个相当大的项目中使用Ninject,并希望使用Dependency Creation和Event Broker扩展。

依赖关系创建自述文件给出了以下示例(尽管我认为InCreatorScope现在可能已重命名为InDependencyCreatorScope

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

此示例通过ParentDependency之间的容器创建依赖关系,而不会相互“硬”引用。这促进了组件之间的松散耦合,并允许我使用Event Broker在Parent上发布事件并在Dependency上订阅它,而无需明确地连接事件处理程序。

我的问题是:如果将Dependency注入到其他对象中并希望标准激活的生命周期为RequestScope,该怎么办?我如何声明我希望在Parent旁边创建标准激活请求范围,但依赖创建者范围?

1 个答案:

答案 0 :(得分:2)

您可以使用条件绑定:

// 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重载,这样就可以更轻松地创建复杂的范围。