我有一堆这样写的类:
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 个实例深度),但是当第一个服务尝试获取另一个服务时,Windsor 会抛出一个异常,说明它是一个循环依赖。
我已将所有服务宣传为具有Transient
生活方式并使用自定义参数请求它们。我至少可以指定递归的最大允许深度吗?还是我错过了另一种方法?
另一个要求:我不能使用类型化工厂,因为我有很多不同类型的服务,因此不希望为这些服务单独生成许多工厂接口。