【发布时间】:2012-08-16 10:41:48
【问题描述】:
我的应用程序包括许多后端程序集(包括实体框架数据存储层),这些程序集由许多前端程序集(包括 Windows 服务和 MVC3 Web 应用程序)共享。
我对 Ninject 绑定过程的理解是,每个包含可注入类型的程序集还应该包含一个 Ninject 模块,该模块定义了这些类型的默认绑定。然后将定义的模块集加载到使用程序集的 Ninject 内核中。
但是,我遇到了问题,因为所需的绑定范围并不总是一致的。例如,我的 MVC 项目需要绑定到数据上下文 InRequestScope,而 Windows 服务绑定到同一个类 InThreadScope。
我显然可以通过将所有模块重新定位到前端项目中来解决这个问题,从而为每个使用场景维护每个模块的单独副本,但这似乎很老套,因为它在多个项目中复制了大部分模块内容。
关于模块在多层应用程序中的位置是否有最佳实践,我如何才能使这与我对项目之间绑定差异的需求相协调?
非常感谢您的建议,
提姆
【问题讨论】:
-
另见stackoverflow.com/questions/1699197/…(IIRC这个Q是一个骗局,但这是我目前最好的)
-
谢谢鲁本。你说得对,这两个问题有很多共同点。我特别喜欢您将运行时参数传递到支持程序集中的模块的建议——非常灵活。
-
嗯;那是前一段时间的事了(没有试图以任何方式拉皮条我的答案)。过去我的字面意思可能是传递参数 - 一般来说,我会尽可能地通过接口来做到这一点。此外,那是在manning.com/seemann 之前,这大大减少了您会在 DI 架构中发现令人费解的问题的数量 - def run buy it no questions ask.