【发布时间】:2016-02-16 14:19:45
【问题描述】:
我正在开发一个非常大的程序,该程序在 IOC 容器中包含 100 多个项目(我们使用 Castle Windsor 作为容器)。我错误地在图中为容器创建了一个循环。我解决了这个问题,现在我正在尝试创建一个单元测试,以便将来检测到这个问题。我决定在图表中使用深度优先搜索来查找循环。下面的简化程序会产生同样的问题:
public class Class1
{
public Class3 Object3
{
get;
set;
}
}
public class Class2
{
public Class1 Object1
{
get;
set;
}
}
public class Class3
{
public Class2 Object2
{
get;
set;
}
}
public static void Main(string[] args)
{
var container = new WindsorContainer();
container.Register(
Component.For<Class1>().ImplementedBy<Class1>(),
Component.For<Class2>().ImplementedBy<Class2>(),
Component.For<Class3>().ImplementedBy<Class3>());
var object1 = container.Resolve<Class1>();
Debug.Assert(object1.Object3 != null);
Debug.Assert(object1.Object3.Object2 != null);
Debug.Assert(object1.Object3.Object2.Object1 != null);//fail
}
我认为这是一个常见问题。但是,经过几个小时的研究,我没有发现 Windsor 或其他任何有此问题的人,也没有发现任何可以检测到此问题的代码。我强烈怀疑有人已经在图书馆中针对这个问题创建了一个特定于温莎的解决方案,或者温莎确实检测到了这个问题,但我还没有找到它。我的问题是解决这个问题的代码在哪里?我很难相信我是唯一遇到这个问题的人。
【问题讨论】:
标签: c# unit-testing inversion-of-control castle-windsor