在:
public class Global_asax : HttpApplication
我有一个属性
public GlobalFactoryManager Factories { get; private set; }
我在
中初始化 protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
this.Factories = new GlobalFactoryManager();
}
尝试调用代码来获取某种类型的实例:
var staffMember = GlobalContext.Factories().Crm.People.MakeIndividualWithAddedState();
麻烦是创建了HttpApplication的多个实例,并且上面的方法调用抛出异常,因为被引用的实例具有null Factory属性。即应用程序启动只被调用一次所以它是一个抽奖,关于哪个实例获得工厂!= null。
工厂应该存储在Global吗?他们不是仅仅创建类型的数据。如果不在哪里?
答案 0 :(得分:2)
每个应用程序的生命周期都会调用Application_Start
一次。您要查找的方法是Application_Init
,它将为创建的每个Application对象实例调用。更多信息可从MS documentation获得(向下滚动到第二段:LifeCycle和Global.asax)。
正如文档所指定的那样,在Application_Start
事件中,您应该只实例化静态属性,然后静态属性将可用于所有实例。
鉴于您的工厂只是提供实例,并且如果多个线程访问它没有问题,我会将其声明为静态:
public static GlobalFactoryManager Factories { get; private set; }
如果您的所有网页共享工厂实例是个问题,那么请将初始化放入Application_Init()
方法。