Ninject 循环依赖

问题描述

wpf 应用中有 2 个类

头等舱

public class Context1 : BaseContext
    {
        private readonly Page1 _page1;

        public Context1(Page1 page1)
        {
            _page1 = page1;
        }
}

二级

public class Context2 : BaseContext
    {
        private readonly Page2 _page2;

        public Context2(Page2 page2)
        {
            _page2 = page2;
        }
}

配置

container = new StandardKernel();
container.Bind<Page1>().ToMethod(context => new Page1() { DataContext = container.Get<Context1>() });
container.Bind<Page2>().ToMethod(context => new Page2() { DataContext = container.Get<Context2>() });

启动时出现stackoverflow异常,如何解决

解决方法

Context 需要一个 Page,而 Page 需要一个 Context,所以它是一个循环依赖。我建议将每个服务的一些行为重构为独立的服务,以便其中至少一个可以从服务中获取其依赖项并打破循环引用。