asp.net-mvc – 无法使用Simple Injector为每个请求创建DbContex
在尝试注册我的DbContext时,Simple Inject会抛出以下异常.
我是DI的新手,可能会遗漏一些相当明显的东西.连接字符串看起来很好.它与用于正常创建DbContext的相同.我正在尝试解决方案here public static class SimpleInjectorInitializer { /// <summary>Initialize the container and register // it as MVC3 Dependency Resolver.</summary> public static void Initialize() { var container = new Container(); InitializeContainer(container); container.RegisterMvcControllers( Assembly.GetExecutingAssembly()); container.RegisterMvcAttributeFilterProvider(); container.Verify(); DependencyResolver.SetResolver( new SimpleInjectorDependencyResolver(container)); } private static void InitializeContainer( Container container) { } } 更新:我仍然没有解决我的问题,但它与Ninject的这个问题非常相似 堆栈跟踪: System.InvalidOperationException was unhandled by user code Message=The configuration is invalid. Creating the instance for type _AccountController failed. Error occurred while trying to get an instance of type _AccountController. The type initializer for 'Web.Controllers._AccountController' threw an exception. Source=SimpleInjector StackTrace: at SimpleInjector.Helpers.Verify(IInstanceProducer instanceProducer,Type serviceType) at SimpleInjector.Container.ValidateRegistrations() at SimpleInjector.Container.Verify() at Web.App_Start.SimpleInjectorInitializer.Initialize() in C:workspaceBrowsarServerQARSiteWebApp_StartSimpleInjectorInitializer.cs:line 24 InnerException: SimpleInjector.ActivationException Message=Error occurred while trying to get an instance of type _AccountController. The type initializer for 'Web.Controllers._AccountController' threw an exception. Source=SimpleInjector StackTrace: at SimpleInjector.InstanceProducers.InstanceProducer.ThrowErrorWhileTryingToGetInstanceOfType(Exception innerException) at SimpleInjector.InstanceProducers.InstanceProducer.GetInstance() at SimpleInjector.Helpers.Verify(IInstanceProducer instanceProducer,Type serviceType) InnerException: System.TypeInitializationException Message=The type initializer for 'Web.Controllers._AccountController' threw an exception. Source=Web TypeName=Web.Controllers._AccountController StackTrace: at Web.Controllers._AccountController..ctor() at lambda_method(Closure ) at SimpleInjector.InstanceProducers.InstanceProducer.GetInstance() InnerException: System.ArgumentException Message=The supplied connection string is not valid,because it contains insufficient mapping or metadata information. Parameter name: connectionString Source=System.Data.Entity ParamName=connectionString StackTrace: at System.Data.Objects.ObjectContext..ctor(EntityConnection connection,Boolean isConnectionConstructor) at System.Data.Objects.ObjectContext..ctor(String connectionString,String defaultContainerName) at Web.Models.BrowsarEntities..ctor() in C:workspaceBrowsarServerQARSiteWebModelsBrowsar.Designer.cs:line 90 at Web.Controllers._AccountController..cctor() in C:workspaceBrowsarServerQARSiteWebControllers_AccountController.cs:line 15 InnerException: System.InvalidOperationException Message=Unable to determine application context. The ASP.NET application path could not be resolved. Source=System.Data.Entity StackTrace: at System.Data.Metadata.Edm.AspProxy.GetBuildManagerReferencedAssemblies() at System.Data.Metadata.Edm.DefaultAssemblyResolver.GetAllDiscoverableAssemblies() at System.Data.Metadata.Edm.DefaultAssemblyResolver.GetWildcardAssemblies() at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName,String resourceName,ICollection`1 uriRegistry,MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path,ExtensionCheck extensionCheck,String validExtension,MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path,MetadataArtifactAssemblyResolver resolver) at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths) at System.Data.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0() at System.Data.Common.Utils.Memoizer`2.Result.GetValue() at System.Data.Common.Utils.Memoizer`2.Evaluate(TArg arg) at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) at System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() at System.Data.Objects.ObjectContext..ctor(EntityConnection connection,Boolean isConnectionConstructor) InnerException: System.Reflection.TargetInvocationException Message=Exception has been thrown by the target of an invocation. Source=mscorlib StackTrace: at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method,Object target,Object[] arguments,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeType typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method,Signature sig,RuntimeType typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture,Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,CultureInfo culture) at System.Data.Metadata.Edm.AspProxy.GetBuildManagerReferencedAssemblies() InnerException: System.InvalidOperationException Message=This method cannot be called during the application's pre-start initialization stage. Source=System.Web StackTrace: at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() at System.Web.Compilation.BuildManager.GetReferencedAssemblies() InnerException: 解决方法
根本原因深埋在内在的例外中.检查堆栈跟踪时,您将能够找到原因.原因在于以下两个内部例外:
和:
换句话说,此异常是由计时问题引起的.我不确定您是否可以更改连接字符串来解决此问题,但您也可以在启动应用程序时将您的初始化转移到稍后的时间.你可以这样做: >删除SimpleInjectorInitializer.cs类的[assembly:WebActivator.PreApplicationStartMethod](顶行). 执行此操作后,初始化(尤其是验证)对象图是在pre-init状态之后完成的,这对于ASP.NET环境中的EF来说似乎太早了. 另一种选择是删除container.Verify();从SimpleInjectorInitializer.Initialize方法调用,因为它是一个杀死你的早期验证过程.但是,在这样做之前,请先阅读此Verify the container’s configuration,以查看备选方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在本地运行ASP.NET C#Web应用程序?
- asp.net-mvc – ASP.NET MVC现在是“开源”.这是一件好事吗
- 如何:在ASP.NET自定义服务器控件中使用AJAX
- asp.net – 应该在ServiceStack中添加哪些插件
- 在ASP.NET C#中抛出异常
- asp.net-mvc – 如何根据MVC中的其他参数值在运行时更改Dis
- asp.net-mvc-3 – 如何使用复选框列制作MVC 3 Webgrid?
- asp.net – 根据文化显示正确的日期格式
- .net – TagBuilder从MVC 3 beta版转到RC
- asp.net-mvc – Asp.Net MVC中的JQuery UI datepicker
- 手动把asp.net的类生成dll文件的方法
- asp.net-mvc – 在显示模板中使用DisplayFor
- ASP .NET MVC Forms授权与Active Directory组
- asp.net – SSRS与自定义Web UI
- asp.net-mvc – 从.Net MVC View获取HTML而不实际
- asp.net – 手动更新表单认证券:
- asp.net – 在localhost上将网站添加到IIS
- asp.net-mvc – 显示用户内容可用操作的干净/干燥
- asp.net-mvc – 在asp.net mvc中将文本框类型转换
- asp.net-mvc-4 – ASP.Net MVC 4和WebSecurity –