我有这样写的一堆类:温莎短暂生活方式的循环依赖组件
public class MyService1 {
public MyService1(MyService1Settings settings, <service-dependent list of dependencies filled by Windsor>) { ... }
}
被登记在温莎这样的:
container.Register(
...
Component.For<MyService1>().LifestyleTransient(),
Component.For<MyService2>().LifestyleTransient(),
...
);
容器没有按”没有任何MyServiceXSettings
类型注册,所以获得服务的唯一方法就是像这样从容器中解析它:
TService service = windsorContainer.Resolve<TService>(new { settings });
事情是,根据settings
对象中的参数,其中一个服务尝试使用不同的设置对象获取其类型的另一个实例。
东西线沿线的:
public class MyService2 {
public MyService2(MyService2Settings settings, <service-dependent list of dependencies filled by Windsor>)
{
this.uplink = settings.Counter == 1
? new AnotherUplink()
: new RecursiveUplink(
container.Resolve<MyService2>(new {
settings = new MyService2Settings(settings.Counter - 1)
});
}
}
这递归依赖性链是有限的(并且是大约6实例深),但是当第一个服务尝试得到另一个温莎抛出一个异常,指出这是循环依赖。
我已经宣传所有服务为Transient
生活方式并向他们请求自定义参数。我能至少指定递归的最大允许深度吗?或者我错过了另一种可以做到的方式?
另一个需求:我不能使用类型化的工厂,因为我有很多不同类型的服务,所以为这些服务单独生成许多工厂接口将是不受欢迎的。