我在Windows azure中部署了一个Web项目(asp.net mvc)作为Web角色。对于Web角色,我有一个继承自RoleEntryPoint的WebRole类。我已经重写了OnStart()方法来初始化一些静态类。
在同一项目的RequestHandler(IHttpHandler)中,我使用这些静态类,但它们没有初始化 - 我必须再次在Global.asax中初始化它们。我认为他们处于不同的应用领域。
我没有在真实的天蓝色环境中测试过这种行为,只在模拟器中测试过。
有没有办法解决这个问题?我需要静态类来在WebRole类和请求处理程序之间共享数据。
由于
答案 0 :(得分:1)
WebRole.cs运行的过程与实际的Web应用程序不同(解释here):
如果您希望Web应用程序使用静态类,则需要使用Global.asax。如果您不想复制代码,请考虑将静态属性存储在另一个类中,并在WebRole.cs和Global.asax中初始化它们,如下所示:
public static class MyStaticThingie
{
public static string XmlContentThingie { get; private set; }
public static Container IoCContainer { get; private set; }
public static void Init()
{
IoCContainer = ...;
XmlContentThingie = File.ReadAllText("Somefile.xml");
}
}
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
MyStaticThingie.Init();
var something = MyStaticThingie.IoCContainer.GetSomething();
something.DoSomething();
return base.OnStart();
}
}
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
MyStaticThingie.Init();
}
}