我有一个 Azure Webrole,它有一个 MVC 应用程序和一个 WCF 服务。在 webrole 的“OnStart”方法中,我实例化了一个表示 IOC Container 的静态变量。
之后,当我进行外部服务调用并尝试获取容器时,变量为空......
我是否遗漏了某些内容,或者为什么该服务无法使用静态?
如果重要的话,我正在运行 Azure SDK 1.8
我有一个 Azure Webrole,它有一个 MVC 应用程序和一个 WCF 服务。在 webrole 的“OnStart”方法中,我实例化了一个表示 IOC Container 的静态变量。
之后,当我进行外部服务调用并尝试获取容器时,变量为空......
我是否遗漏了某些内容,或者为什么该服务无法使用静态?
如果重要的话,我正在运行 Azure SDK 1.8
我想我知道你的意思。在 WebRole.cs 类中初始化 IOC 容器,然后尝试在 WCF 服务或托管在同一Web 角色实例中的 MVC 应用程序中使用它。
好吧,那是不可能的。您必须知道,在 WebRole.cs 中运行的代码与您的实际 Web 应用程序(w3wp.exe 中的 MVC 网站/WCF 服务)在不同的进程(WaIISHost.exe)中运行:
这在这里详细解释。
如果您想为您的 Web 应用程序初始化 IOC 容器,您应该在 Global.asax 文件中执行此操作。如果您还想在 WebRole.cs 中使用 IOC 容器(在 Web 应用程序启动之前做一些工作),您还需要在 WebRole.cs 文件中对其进行初始化(因为这是 2 个不同的进程)。
如果您的 WebRole 有两个站点/角色,一个用于 MVC 应用程序,一个用于 WCF 服务(检查您的配置),那么您正在同一个 WebRole(云服务 VM)中运行两个独立的应用程序,每个应用程序具有不同的端点。您不能跨应用程序共享静态资源。您还需要在 WCF 服务中实例化一个实例。