0

this问题继而,我现在有以下结构:参考VS依赖

Wolfie.Core - 包含业务逻辑&实体,也包括库接口(例如IUserRepository)需要访问存储库使用类构造函数注入。

Wolfie.Data - 参考Wolfie.Core并具有实施IUserRepository

一个UserRepository所以我很高兴这个至今。 Core不知道数据实现的任何内容,因此不依赖于任何内容。

我遇到的绊脚石是在我的Web层。

我的Web项目引用了我的Core项目。然后我可以创建一个Core类,比如User,但我必须将IUserRepository的具体实现传递给它。所以我需要在我的Web项目中引用我的Data项目,这看起来不对。它现在看起来像Web依赖于Data,它不应该是。

那么,如何注入我的核心用户类与数据类没有直接引用数据?

期待您的帮助。

+0

相关:http://stackoverflow.com/questions/5267525/dal-bll-gui-composition-root-how-to-setup-di-bindings/5270734#5270734 – 2012-02-10 15:54:28

回答

1

您可以绑定到主应用程序代码中的接口,仅引用合约程序集(“Core”程序集)。然后使用反射在运行时加载您的依赖关系并注入具体的类。

有一些需要解决的几个问题:

  • 你将如何找到需要的组件?
  • 一旦你找到你的装配体,你应该使用什么具体的类?
  • 你会如何宽松地配置你的应用程序来使用这些程序集和那些具体的类?您不想简单地将您的硬编码组件参考和具体类参考转换为硬编码组件和类名称字符串...

这些问题可以通过许多不同的方式解决,的不同依赖注入库之间的主要区别因素。

有些使用顶级配置代码或配置代码模块(例如NInject),有的使用XML配置(例如Unity),有的使用的自动发现机制基于属性/约定(例如MAF/MEF),和有些使用所有这些的组合(例如Castle.Windsor)。

大多数或所有这些库支持每种机制,但我已经提到了最突出的焦点。