类型的未处理的异常'System.StackOverflowException'发生在System.Core.dll [英] An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll

查看:2754
本文介绍了类型的未处理的异常'System.StackOverflowException'发生在System.Core.dll的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Asp.net MVC项目

我有一个初始化单位容器bootsrapper。

我不知道为什么,但我得到


  

类型'System.StackOverflowException的未处理的异常出现在System.Core.dll


我已经翻了一番检查并登记在我的初始化只是做了。

所有的依赖关系在构建函数仅注射。

什么可能造成的?

 保护无效的Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);        Initializer.Initialize();
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

BundleConfig.RegisterBundles(BundleTable.Bundles)失败后;

 公共静态类初始化
{
    私人静态布尔isInitialize;
    私人静态只读对象LockObj =新的对象();
    私有静态IUnityContainer defaultContainer =新UnityContainer();    静态初始化()
    {
        初始化();
    }    公共静态无效初始化()
    {
        如果(isInitialize)
            返回;        锁定(LockObj)
        {
            IUnityContainer容器= defaultContainer;            //注册为团结MVC
            DependencyResolver.SetResolver(新UnityDependencyResolver(容器));            //注册团结的Web API
            // GlobalConfiguration.Configuration.DependencyResolver =新Unity.WebApi.UnityDependencyResolver(容器);            #区域经理
            container.RegisterType< ISettingsManager,设定管理>();            container.RegisterType< IMamDataManager,MamDataManager>();            container.RegisterType< IAppsDataManager,AppsDataManager>();
            #endregion            #区域DALS
            container.RegisterType<&IDAL LT; ClientService.DAL.EntityFramework.App>中AppsDal>();            #endregion DALS            #区域缓存
            container.RegisterType&所述; ICACHE&下;串,ClientService.DAL.EntityFramework.Group>中GroupsCache>(新ContainerControlledLifetimeManager());            container.RegisterType&所述; ICACHE&下;串,ClientService.DAL.EntityFramework.App>中AppsCache>(新ContainerControlledLifetimeManager());            container.RegisterType&所述; ICACHE&下;串,SettingsServiceData>中SettingsServiceDataCache>(新ContainerControlledLifetimeManager());
            #endregion缓存            #区域轮询器
            container.RegisterType&所述; IPoller&下; C​​lientService.DAL.EntityFramework.Group>中GroupsPoller>(新ContainerControlledLifetimeManager());            container.RegisterType&所述; IPoller&下; C​​lientService.DAL.EntityFramework.App>中AppsPoller>(新ContainerControlledLifetimeManager());            container.RegisterType&所述; IPoller&下; SettingsServiceData>中SettingsPoller>(新ContainerControlledLifetimeManager());            #endregion轮询器
            container.RegisterType&所述; IDefaultConfigurationGroupSingleton,DefaultConfigurationGroupSingleton>(新ContainerControlledLifetimeManager());            container.RegisterType< IApplicationLogger,Log4NetLogger>();            如果(!isInitialize)
            {
                isInitialize = TRUE;
            }
        }
    }
}


解决方案

如果没有提供code,我想这是由于循环依赖。
另一个可能的原因是,你在你的构造函数中的一个不正确的循环。

作为一个例子,一类需要的B的实例,以解决; B级要求C级的实例来加以解决和C类需要一个实例来加以解决。这导致在一个无限循环

 大众A级
{
    大众A(B B)
    {
    }
}大众B级
{
    大众B(C C)
    {
    }
}公共C类
{
    公众B(A一)
    {
    }
}

In my Asp.net MVC project

I have a bootsrapper that initialize a unity-container.

I don't know why, but I get

An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll

I have doubled checked and registration is done only in my initializer.

All dependencies are injected in the ctors only.

What could have caused this?

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);

        Initializer.Initialize();
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

It fails after BundleConfig.RegisterBundles(BundleTable.Bundles);

public static class Initializer
{
    private static bool isInitialize;
    private static readonly object LockObj = new object();
    private static IUnityContainer defaultContainer = new UnityContainer();

    static Initializer()
    {
        Initialize();
    }

    public static void Initialize()
    {
        if (isInitialize)
            return;

        lock (LockObj)
        {
            IUnityContainer container = defaultContainer;

            //registering Unity for MVC
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));

            //registering Unity for web API
            //  GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

            #region managers
            container.RegisterType<ISettingsManager, SettingsManager>();

            container.RegisterType<IMamDataManager, MamDataManager>();

            container.RegisterType<IAppsDataManager, AppsDataManager>();
            #endregion

            #region Dals
            container.RegisterType<IDal<ClientService.DAL.EntityFramework.App>, AppsDal>();

            #endregion Dals

            #region cache
            container.RegisterType<ICache<string, ClientService.DAL.EntityFramework.Group>, GroupsCache>(new ContainerControlledLifetimeManager());

            container.RegisterType<ICache<string, ClientService.DAL.EntityFramework.App>, AppsCache>(new ContainerControlledLifetimeManager());

            container.RegisterType<ICache<string, SettingsServiceData>, SettingsServiceDataCache>(new ContainerControlledLifetimeManager());
            #endregion cache

            #region Pollers
            container.RegisterType<IPoller<ClientService.DAL.EntityFramework.Group>, GroupsPoller>(new ContainerControlledLifetimeManager());

            container.RegisterType<IPoller<ClientService.DAL.EntityFramework.App>, AppsPoller>(new ContainerControlledLifetimeManager());

            container.RegisterType<IPoller<SettingsServiceData>, SettingsPoller>(new ContainerControlledLifetimeManager());



            #endregion Pollers


            container.RegisterType<IDefaultConfigurationGroupSingleton, DefaultConfigurationGroupSingleton>(new ContainerControlledLifetimeManager());

            container.RegisterType<IApplicationLogger, Log4NetLogger>();

            if (!isInitialize)
            {
                isInitialize = true;
            }
        }
    }
}

解决方案

Without providing code, I guess this is due to a circular dependency. Another possible reason is that you have an improper loop in one of your constructors.

As an example, A class requires an instance of B to be resolved; B class requires an instance of C class to be resolved and C class needs an instance of A to be resolved. This results in an infinite loop:

public class A
{
    public A(B b)
    {
    }
}

public class B
{
    public B(C c)
    {
    }
}

public class C
{
    public B(A a)
    {
    }
}

这篇关于类型的未处理的异常'System.StackOverflowException'发生在System.Core.dll的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆