gpt4 book ai didi

asp.net-mvc - 无法在 SimpleInjectorInitializer 中检索用于验证的 Entity Framework 对象上下文

转载 作者:行者123 更新时间:2023-12-02 02:14:06 25 4
gpt4 key购买 nike

好像我在安装Simple Injector MVC3 Integration包的时候,SimpleInjectorInitializer放在了App_Start文件夹下。但是,当在 Initialize() 中调用 Verify() 方法时,它会在尝试获取 Entity Framework 对象上下文时产生此错误(我还提供了内部异常):

The supplied connection string is not valid, because it contains insufficient mapping or metadata information.
InnerException: Unable to determine application context. The ASP.NET application path could not be resolved.
InnerException: Exception has been thrown by the target of an invocation.
InnerException: (Shown in browser) This method cannot be called during the application's pre-start initialization phase.

我似乎还必须将注册调用从 Global.asax.cs Application_Start() 移至 SimpleInjectorInitializer 的 InitializeContainer() 方法。

我不完全确定此时该做什么,但这个问题似乎与这个问题有些相关:Connection string exception after upgrading to Ninject 3.0.0-rc3

似乎应用程序试图在 Entity Framework 意识到自己的上下文并且无法正确解析连接字符串之前加载上下文?

最佳答案

It seems that the application is trying to load the context before Entity Framework is even aware of its own and is unable to properly parse the connection string?

你完全正确。 SimpleInjectorInitializer.Initialize 方法在预应用程序启动阶段自动调用。虽然此时配置容器没有问题,但在您的情况下调用 Verify() 还为时过早。 Verify 简单地迭代所有注册并对它们调用 GetInstance 以查看它是否可以创建它。然而,在应用程序的生命周期中,无法创建 Entity Framework 对象上下文。我必须说,我认为 EF 框架对 ASP.NET 框架一无所知是很奇怪的,但不幸的是,事实就是这样。

要解决此问题,您可以将 Verify() 调用移到应用程序启动的稍后时间或完成初始化。例如,您可以执行以下操作:

  1. 删除 SimpleInjectorInitializer.cs 类的 [assembly: WebActivator.PreApplicationStartMethod](第一行)。
  2. 在全局 asax 的 Application_Start() 事件中添加对 SimpleInjectorInitializer.Initialize() 方法的调用。

完成此操作后,对象图的初始化(尤其是验证)在初始化前状态之后完成。

另一种选择是从 SimpleInjectorInitializer.Initialize 方法中删除 container.Verify(); 调用,因为它是早期的验证过程。但是,请阅读此 Verify the container’s configuration首先,在这样做之前查看替代方案。

SimpleInjector.MVC NuGet 包使用 WebActivator.PreApplicationStartMethod 以方便使用。它允许包“正常工作”,而不需要开发人员进行任何手动编码(当然除了连接容器)来让它工作。但由于在使用 Entity Framework 时这不起作用,我们将不得不重新考虑该策略。

关于asp.net-mvc - 无法在 SimpleInjectorInitializer 中检索用于验证的 Entity Framework 对象上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com