2

上:

 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 上吗?他们不只是创建类型来保存数据。如果不是在哪里?

4

1 回答 1

2

Application_Start应用程序的每个生命周期都会调用一次。您正在寻找的方法是Application_Init,它会为创建的 Application 对象的每个实例调用。更多信息可从MS 文档中获得(向下滚动到第二段:LifeCycle 和 Global.asax)。

正如文档指定的那样,Application_Start如果您应该只实例化静态属性,那么所有实例都可以使用这些属性。

鉴于您的工厂只是提供实例并且如果被多个线程访问没有问题,我将其声明为静态:

public static GlobalFactoryManager Factories { get; private set; }

如果您的所有页面共享一个工厂实例是一个问题,那么将您的初始化放入该Application_Init()方法中。

于 2013-06-27T08:37:42.050 回答