C# 带工厂的DryIoc递归依赖项异常(Func<;>;)

C# 带工厂的DryIoc递归依赖项异常(Func<;>;),c#,ioc-container,dryioc,C#,Ioc Container,Dryioc,嘿,我已经从Autofac转到DryIoc了。我的代码以前工作过,但现在导致异常“解析时检测到递归依赖项”。(代码简化) 公共类工厂{ 公共工厂(Func getA){} } 公营工厂{ 公共B工厂(Func getB,A工厂){} } 公共A类{ 公共A(不相关服务,B工厂){} } 实际的代码是复杂的,所以假设有一个原因,这个代码结构是必要的 它正在尝试解析AFFactory-->A-->B工厂-->AFFactory,这导致了问题。但是因为它使用了Func,所以应该没问题吧?(或者至少是

嘿,我已经从Autofac转到DryIoc了。我的代码以前工作过,但现在导致异常“解析时检测到递归依赖项”。(代码简化)

公共类工厂{
公共工厂(Func getA){}
}
公营工厂{
公共B工厂(Func getB,A工厂){}
}
公共A类{
公共A(不相关服务,B工厂){}
}
实际的代码是复杂的,所以假设有一个原因,这个代码结构是必要的

它正在尝试解析AFFactory-->A-->B工厂-->AFFactory,这导致了问题。但是因为它使用了Func,所以应该没问题吧?(或者至少是在Autofac中)

有没有办法注册它,使它不会引发此异常?

以下是:

默认情况下,不允许递归依赖关系

下面的文档或中描述了修复

:

使用系统;
使用DryIoc;
公共课程
{
公共静态void Main()
{
var c=新容器(
//rules=>rules.WithFuncAndLazyWithoutRegistration()//修复1:使所有内容都可以延迟解析,以防止递归依赖项检查!
);
c、 登记册(
//setup:setup.With(asResolutionCall:true)//fix2:make A可动态解析
);
c、 寄存器();
c、 寄存器();
c、 登记册(
setup:setup.With(asResolutionCall:true)//fix3:使BFactory a可动态解析-修复程序在此处,而不在B中,因为BFactory已循环到某个工厂,仅使B动态是不够的
);
c、 寄存器();
var af=c.Resolve();
控制台写入线(af);
}
公营工厂{
公共工厂(Func getA){}
}
公营工厂{
公共B工厂(Func getB,A工厂A工厂){}
}
公共A类{
公共A(不相关服务,B工厂B工厂){}
}
公共类B{}
公共类无关服务{}
}

您能详细说明一下吗?在我的脑海中,我认为容器将尝试解析一个工厂,并将看到“Func”,然后停止(防止递归)。你能提供一个例子,说明如何编写代码,使其使用Func,以便我能更好地理解吗?不,别介意,我看错了。我会删除之前的评论,没有意义。谢谢你的帮助。我最终使用了Lazy(在BFactory的初始值设定项中)。我尝试使用fix2(和fix3),它成功地创建了对象,但是当我调用getA()时,它抛出了相同的异常。(可能是我的代码有问题)。嗯,基本上这是一个不错的、不可知论的解决方法,添加到文档中:)
public class AFactory {
   public AFactory(Func<A> getA){ }
}

public class BFactory {
   public BFactory(Func<B> getB, AFactory factory){ }
}

public class A { 
   public A(IrrelevantService service, BFactory factory){ }
}