【发布时间】:2015-07-08 09:29:05
【问题描述】:
根据 COMPOSITION ROOT 模式,我必须构建尽可能靠近应用程序入口点的所有依赖关系图。
我的架构是面向插件的。所以,如果有人想扩展我的基础系统,他可以。
例如,在我的基础系统中,我有这样的结构:
- 视图层
- 服务层
- 数据访问层
- 模型层
在 DAL 中,我公开了一些类,例如:
- IRepository
- NHibernateRepository
- 产品存储库
所以,如果一个插件想要将我的基本 Product 类扩展为 ExtendedProduct,然后创建继承自 NHibernateRepository 的 ExtendedProductRepository。
问题是: 如何使用 NInject 从我的基础系统实例化 NHibernateRepository 的实例?
所以,我知道首先要做的是构建图依赖关系:
using (var kernel = new StandardKernel())
{
kernel.Bind(b => b.FromAssembliesMatching("*")
.SelectAllClasses()
.InheritedFrom<IRepository>()
.BindAllInterfaces());
}
但是,我发现当我执行以下操作时:
kernel.GetAll<IRepository>()
它将返回一个 ProductRepository 实例,以及两个 IRepository 对象下的另一个 ProductExtendedRepository。
那么,如何从我的基本系统中保存 ProductExtended 对象...? 另一个问题是,我如何在我的插件中注入一个对象实例,或者,插件如何自动注入一些基本系统程序集的实例?
谢谢大家。 我将不胜感激。
【问题讨论】:
标签: nhibernate ninject