好的,我遇到了一个堆栈错误。它卡在这个文件上:
using System.Web;
using NHibernate;
using Nichols.Web.App_Start;
namespace Nichols.Web.DependencyResolution
{
public class StructureMapScopeModule : IHttpModule
{
public void Dispose()
{
StructuremapMvc.StructureMapDependencyScope.Dispose();
}
public void Init(HttpApplication context)
{
context.BeginRequest += (sender, e) =>
{
InitializeNestedContainerForRequest();
var session = GetCurrentSession();
session.BeginTransaction();
};
context.EndRequest += (sender, e) =>
{
var session = GetCurrentSession();
if (context.Context.Error == null
&& IsOk(context.Response.StatusCode))
{
session.Transaction.Commit();
}
else
{
session.Transaction.Rollback();
}
DisposeNestedContainerForRequest();
};
}
private ISession GetCurrentSession()
{
var container = StructuremapMvc.StructureMapDependencyScope.CurrentNestedContainer;
return container.GetInstance<ISession>();
}
private void InitializeNestedContainerForRequest()
{
StructuremapMvc.StructureMapDependencyScope.CreateNestedContainer();
}
private void DisposeNestedContainerForRequest()
{
StructuremapMvc.StructureMapDependencyScope.DisposeNestedContainer();
}
private bool IsOk(int statusCode)
{
return statusCode >= 200 && statusCode < 300;
}
}
}
我已经到处查找了,在可能的解决方案中提到了版本3.0.5。感谢您的帮助!
我收到的错误在这里:
Server Error in '/' Application.
Bi-directional dependency relationship detected!
Check the StructureMap stacktrace below:
1.) Lambda: default
2.) Instance of NHibernate.ISession
3.) Container.GetInstance(NHibernate.ISession)
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: StructureMap.Building.StructureMapBuildException: Bi-directional dependency relationship detected!
Check the StructureMap stacktrace below:
1.) Lambda: default
2.) Instance of NHibernate.ISession
3.) Container.GetInstance(NHibernate.ISession)
Source Error:
Line 43: {
Line 44: var container = StructuremapMvc.StructureMapDependencyScope.CurrentNestedContainer;
Line 45: return container.GetInstance<ISession>();
Line 46: }
Line 47:
Source File: C:\projects\NicholsFarms_demo_newCropYear\Nichols\src\Nichols.Web\DependencyResolution\StructureMapScopeModule.cs Line: 45
Stack Trace:
[StructureMapBuildException: Bi-directional dependency relationship detected!
Check the StructureMap stacktrace below:
1.) Lambda: default
2.) Instance of NHibernate.ISession
3.) Container.GetInstance(NHibernate.ISession)
]
lambda_method(Closure , IBuildSession , IContext ) +692
StructureMap.Building.BuildPlan.Build(IBuildSession session, IContext context) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Building\BuildPlan.cs:151
StructureMap.Pipeline.LifecycleObjectCache.Get(Type pluginType, Instance instance, IBuildSession session) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Pipeline\LifecycleObjectCache.cs:71
StructureMap.SessionCache.GetObject(Type pluginType, Instance instance, ILifecycle lifecycle) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\SessionCache.cs:88
StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\SessionCache.cs:66
StructureMap.Container.GetInstance(Type pluginType) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Container.cs:335
StructureMap.Container.GetInstance() in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Container.cs:200
Nichols.Web.DependencyResolution.StructureMapScopeModule.GetCurrentSession() in C:\projects\NicholsFarms_demo_newCropYear\Nichols\src\Nichols.Web\DependencyResolution\StructureMapScopeModule.cs:45
Nichols.Web.DependencyResolution.StructureMapScopeModule.<Init>b__1_0(Object sender, EventArgs e) in C:\projects\NicholsFarms_demo_newCropYear\Nichols\src\Nichols.Web\DependencyResolution\StructureMapScopeModule.cs:20
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +142
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +92
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0
StructureMap
?可能是在使用_instances.Contains(instance)
部分的内部Get
方法中出现了误报错误,该问题已自3.0.5
版本得到修复。 - Tetsuya Yamamoto`code private ISession GetCurrentSession() { var container = StructuremapMvc.StructureMapDependencyScope.CurrentNestedContainer; return container.GetInstance();
} code`
有什么想法可以更改代码以避免这种情况吗? - John Edward Law