You use delegate injection to solve this problem.
public class StayOnTillAppDies : IStayOnTillAppDies
{
private readonly Func<IDiesWhenRequestObjectDies> resolver;
public StayOnTillAppDies(Func<IDiesWhenRequestObjectDies> resolver)
{
this.resolver = resolver;
}
}
Use the following code in the StayOnTillAppDies
class when you require an instance of IDiesWhenRequestObjectDies
IDiesWhenRequestObjectDies instance = this.resolver();
This is the configuration I used to set it up.
IContainer container = new Container(x =>
{
x.ForRequestedType<IStayOnTillAppDies>()
.TheDefaultIsConcreteType<StayOnTillAppDies>()
.CacheBy(InstanceScope.Singleton);
x.ForRequestedType<IDiesWhenRequestObjectDies>()
.TheDefaultIsConcreteType<DiesWhenRequestObjectDies>()
.CacheBy(InstanceScope.PerRequest);
});
container.Configure(x =>
{
x.SelectConstructor<StayOnTillAppDies>(() =>
new StayOnTillAppDies(() =>
container.GetInstance<IDiesWhenRequestObjectDies>()));
});