从共享位置或带有Unity的GAC引用程序集

问题描述

| 是否可以从共享位置或带有Unity的GAC引用程序集? 假设我有两个项目(在相同的解决方案下): MyProject.Data(存储库接口) MyProject.Data.EntityFramework(存储库实体框架实现) 我想在同一个解决方案下的ASP.NET MVC应用程序(MyProject.Web)中使用IoC,但是我不想为接口和实现都添加项目引用。理想情况下,我想向接口添加项目引用,并从共享位置或GAC加载实施。这样可以防止MyProject.Web中的任何代码创建特定实现的实例-这应始终由IoC提供程序完成。 我可以决定创建一个nHibernate实现,而IoC会使切换变得容易得多。如果有任何直接的耦合,那将是一场噩梦。这使我回到了问题所在。让我们消除开发人员在不询问IoC容器如何解析接口的情况下实例化具体实现的可能性。     

解决方法

        Unity只能实例化它可以持有的类型,因此如果要使用其类型,ѭ0程序集必须位于MVC输出目录中。如果您不想直接引用该项目,则可以使用构建操作来复制程序集,但是如果沿该路线走下去,则意味着您必须使用XML而非API配置Unity,这可能会有些麻烦,并且失去了使用API​​进行类型检查的优势。 最终,我会使用API​​并直接引用项目。这应该伴随着教育,以便其他开发人员知道应该如何使用系统体系结构,以及有助于实施的代码审查。