StackOverflowException当使用多个类并在相反的类中定义接口时

时间:2017-03-09 23:02:32

标签: c# .net unity-container

我使用Unity dependency injection使用NuGet package安装了以下示例,我的项目中有以下类型的设置。但是当在另一个类的构造函数中使用两个接口时(参见下面的代码),在'System.StackOverflowException'

中抛出一个未处理的类型Microsoft.Practices.Unity.dll的异常

类和接口设置:

public interface ITest1
{

}

public interface ITest2
{

}

public class Test1 : ITest1
{
    private readonly ITest2 _test2;

    public Test1(ITest2 test2)
    {
        _test2 = test2;
    }
}

public class Test2 : ITest2
{
    private readonly ITest1 _test1;

    public Test2(ITest1 test1)
    {
        _test1 = test1;
    }
}

控制台应用程序:

static IUnityContainer _container;

static void Main(string[] args)
{
    LoadContainer();

    var two = _container.Resolve<Test1>();
}

private static void LoadContainer()
{
    _container = new UnityContainer();

    _container.RegisterTypes(
        AllClasses.FromLoadedAssemblies(),
        WithMappings.FromMatchingInterface,
        WithName.Default);
}

所以基本上在解析Test1类时,会抛出异常,如下所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

此异常由循环依赖项引起。

Test1依赖于ITest2,并且实现依赖于ITest1。因此,当您解析ITest时,它需要满足ITest2依赖关系。解析Test2依赖关系后,它依赖ITest StackOverflowException来自{{1}}。