2009-05-29 115 views
0

请先阅读以下主题:循环引用(再次...)

Circular reference between Assemblies in C# and Visual Studio 2005

实现接口是解决我的问题,但不履行我的目标。

我的目标是仅在UI层/程序集中使用BO层/程序集。这样我就可以保持一个干净的图层到图层的引用。

因为我不希望在UI层/程序集中为BO层/程序集和ORMapper层/程序集添加引用。

我只想在UI层/程序集内使用BO-layer/assembly。

与此同时有人建议我说,它只能使用反射,而不是DI。真的吗?

回答

0

如果你确实坚持在你的BO层隐藏ORM层后面,那么依赖注入应该仍然能够帮助你。请注意,虽然您将不能从您的UI线程中引用DI库,因为那将是您的业务对象将来自的地方。

方法:

  • 创建包含方法加载数据的接口来填充User对象
  • 在你的ORM项目
  • 在启动时实现此接口,登记对抗的ORM实现接口使用某种类型的DI容器(请阅读您使用的任何DI库的详细信息,例如:www.ninject.org用于轻量级的东西)
  • User对象提供构造函数这需要人口接口的实例,从

当你需要一个User对象加载数据之后,你问DI库来创建它,并且DI库将建设User,并给它的一个参考ORM实现。你必须注入一些属性到DI调用中,以及“用户名”和“密码”才能完全用值填充它。

请注意,这不正是DI发明的应用程序代码真的应该直接处理ORM来创建/读取/更新/删除业务对象。

+0

我期待着更好的解决方案,但这是我现在可以提出的最好的解决方案。 – jerryjvl 2009-05-29 07:20:27