处理 SharePoint 项目时,我尝试将 Unity 用作依赖项注入(inject)容器。
我让这个容器运行的第一个想法是使用 global.asax,如 P&P 的最佳实践中所述:
http://webclientguidance.codeplex.com/releases/view/17134#DownloadId=43305
在这些最佳实践中,他们告诉您手动编辑 global.asax 文件以使其继承 SPUnityHttpApplication。
<%@ Application Language="C#" Inherits="Unity.SharePoint.SPUnityHttpApplication" %>
手动编辑此文件在企业环境中不是一种选择,因为我们有多个环境 (DTAP),并且所有环境都有多个需要手动步骤的前端服务器。
我找不到任何方法来使用功能或 wsp 或任何东西来部署 global.asax 文件,因为 global.asax 位于 Web 应用程序根目录中,而 sharepoint 将其他文件部署到/14 hive 文件夹,因此您不能访问 Web 应用程序根目录。
我研究过的替代方案是 SharePointServiceLocator 。这个内置功能几乎可以满足我的需求。但它只能解析具有默认构造函数的类。这样我就不能通过使用构造函数注入(inject)来链式解析我的所有实现。 I found a post 如何更改服务定位器以利用统一性,但如果您阅读评论,这似乎无法正常工作。
我的问题可以通过解决以下两个主要问题中的一个来解决:
最佳答案
由于问题中描述的部署问题, global.asax 似乎不是执行此操作的最佳解决方案。
一个可行的解决方案是在 httpmodule 中实现它
init 方法可用于连接所有内容,因为它会在 sharepoint 应用程序启动时调用。
可以在 web.config by a feature receiver 中添加 httpmodule
这样,您就无需使用位于无法使用功能部署到的目录中的 global.asax 做任何技巧,并且您拥有实例化 DI 容器的所有功能和正确时间。
关于sharepoint - 在企业环境中将 global.asax 部署到 sharepoint 2010 以启用统一 DI 容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6437483/