【问题标题】:Reference an assembly from a shared location or the GAC with Unity使用 Unity 从共享位置或 GAC 引用程序集
【发布时间】:2011-05-31 19:26:57
【问题描述】:

是否可以使用 Unity 从共享位置或 GAC 引用程序集?

假设我有两个项目(在同一个解决方案下):

  • MyProject.Data(存储库接口)
  • MyProject.Data.EntityFramework(存储库实体框架实现)

我想在同样属于同一解决方案的 ASP.NET MVC 应用程序 (MyProject.Web) 中使用 IoC,但我不想同时为接口和实现添加项目引用。理想情况下,我想向接口添加项目引用,并从共享位置或 GAC 加载实现。这可以防止 MyProject.Web 中的任何代码创建特定实现的实例 - 这应该始终由 IoC 提供者完成。

我可以决定创建一个 nHibernate 实现,而 IoC 将使切换变得更加容易。如果有任何直接耦合,那将是一场噩梦。这让我回到了这个问题。让我们消除开发人员在不询问 IoC 容器如何解析接口的情况下实例化具体实现的可能性。

【问题讨论】:

    标签: asp.net interface inversion-of-control unity-container gac


    【解决方案1】:

    Unity 只能实例化它可以获取的类型,所以如果你想使用它的类型,你的 MyProject.Data.EntityFramework 程序集必须在你的 MVC 输出目录中。如果您不想直接引用该项目,您可以使用构建操作复制程序集,但沿着这条路线走意味着您必须使用 XML 而不是 API 来配置 Unity,这可能会有点痛苦和失败使用 API 进行类型检查的优势。

    最终我会使用 API 并直接引用该项目。这应该伴随着教育,以便其他开发人员知道应该如何使用系统架构,以及帮助执行它的代码审查。

    【讨论】:

    • 感谢您的回复。我不介意使用 XML,但我明白你的意思。也许他们将来会添加此功能。
    • 我将创建一个单独的 IoC 项目,它将引用接口和实现项目。这将包含一个使用流畅语法 (win) 创建的容器。 Web 项目可以引用 IoC 项目和任何接口项目,从而将其与实现解耦(双赢)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多