正在处理具有不同层的MVC项目(主项目MVC Web其他项目是Bin指向MVC web Bin文件夹的类库),使用Unity进行依赖注入。
在我的本地机器上运行时一切都很好。如果我发布我的网页并浏览应用程序
给定的程序集名称或代码库无效。
var container = new UnityContainer();
container.LoadConfiguration(); //Error line
我花了一些时间来查看问题并发现在我发布的Bin文件夹中我的业务和数据访问DLL丢失了?
这是因为Unity吗?因为我的界面通过统一引用了商业层?
我是否遗漏了某些内容或我如何发布没有任何问题?
PS:如果我复制DLL并放入虚拟目录文件夹,一切看起来都很好。
由于
答案 0 :(得分:2)
在Web项目中,或任何使用依赖项注入的最终项目(可能是WPF或Silverlignt应用程序,甚至是经典的ASP.NET),所使用的所有二进制文件应该可用即可。
想象一下,您有Lib1.dll
和Lib1.Impl.dll
,分别是API库和API的具体实现。现在,在Web项目中,您依赖依赖注入,为您提供Lib1.dll
接口的具体实现。您可能永远不会在该应用程序中直接使用Lib1.Impl.dll
中的类。仍然, DI框架需要访问 Lib1.Impl.dll
才能实例化依赖项。
根据DI框架和加载依赖项支持的功能,您应该相应地提供它们。将它们全部放在bin文件夹中或直接由最终项目引用似乎很简单 - 这可能是您在bin文件夹中提供实现dll-s时项目工作的原因。但是,由于这与解耦的考虑不一致,您可能必须查看动态加载dll-s的替代方法 - 例如物理位置。我确信Unity支持这种机制,因为企业库中的模块化允许从文件系统位置引导模块。
我必须说,虽然我提到了解耦和保持引用分开,但如果你在项目层次结构的最后一层(Web应用程序)中引用它们,则不是问题 ,只要您没有在该应用程序中导致耦合的代码。