我使用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类时,会抛出异常,如下所示:
答案 0 :(得分:1)
此异常由循环依赖项引起。
类Test1
依赖于ITest2
,并且实现依赖于ITest1
。因此,当您解析ITest
时,它需要满足ITest2
依赖关系。解析Test2
依赖关系后,它依赖ITest
StackOverflowException
来自{{1}}。