【问题标题】:Circular reference between Assemblies in C# and Visual Studio 2005 (Again...)C# 和 Visual Studio 2005 中的程序集之间的循环引用(再次...)
【发布时间】:2009-05-29 06:45:20
【问题描述】:

请先阅读以下主题:

Circular reference between Assemblies in C# and Visual Studio 2005

实现接口解决了我的问题,但没有实现我的目标。

我的目标是仅使用 UI 层/程序集的 BO 层/程序集。这样我就可以保持干净的层到层参考。

因为我不想为 UI 层/程序集中的 BO 层/程序集和 ORMapper-层/程序集添加引用。

我只想在 UI 层/程序集中使用 BO 层/程序集。

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

【问题讨论】:

    标签: c# visual-studio-2005 n-tier-architecture


    【解决方案1】:

    如果你真的坚持将 ORM 层隐藏在你的 BO 层之后,那么依赖注入应该仍然能够帮助你。请注意,您将无法避免从您的 UI 线程中引用 DI 库,因为那将是您的业务对象的来源。

    方法:

    • 创建一个接口,其中包含加载数据以填充 User 对象的方法
    • 在您的 ORM 项目中实现此接口
    • 在启动时,使用某种 DI 容器针对接口注册 ORM 实现(阅读有关您使用的任何 DI 库的详细信息,例如:www.ninject.org 以获得轻量级的东西)
    • User 对象提供一个构造函数,该构造函数采用填充接口的实例来从中加载数据

    然后当你需要一个User对象时,你要求DI库创建它,DI库将构造User并给它一个ORM实现的引用。您还必须在 DI 调用中注入一些属性,以便“用户名”和“密码”能够用值完全填充它。

    请注意,这并不是 DI 的真正目的......应用程序代码实际上应该直接处理 ORM 以创建/读取/更新/删除业务对象。

    【讨论】:

    • 我期待更好的解决方案,但这是我目前能想到的最好的解决方案。
    • 非常感谢杰瑞!这真的让我觉得很痒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2021-01-04
    • 2010-09-12
    相关资源
    最近更新 更多