У меня есть интерфейс:
public interface IFoo {
void Foo ():
}
И реализация IFoo, предназначенная для агрегирования всех других экземпляров IFoo, которые зарегистрированы сканированием StructureMap:
public class CompositeFoo : IFoo
{
public void Foo ()
{
foreach (IFoo f in _foos)
f.Foo ();
}
public CompositeFoo (IEnumerable<IFoo> foos)
{
_foos = foos;
}
IEnumerable<IFoo> _foos;
}
В моей инициализации StructureMap я делаю:
Container c = new Container (x =>
{
x.For<IFoo> ().TheDefaultIsConcreteType<CompositeFoo> ();
x.Scan (s => {
s.WithDefaultConventions ();
s.ExcludeType<CompositeFoo> ();
s.AddAllTypes<IFoo> ();
});
});
Однако при попытке разрешить экземпляр IFoo я получаю исключение о двунаправленной (круговой) зависимости.
Я попытался сделать условную регистрацию CompositeFoo:
x.For<IGlobalConfiguration> ().ConditionallyUse (c =>
{
c.If (ctx => ctx.ParentType != typeof (CompositeGlobalConfiguration)})
.ThenIt.Is.Type<CompositeGlobalConfiguration> ();
});
но безрезультатно ... Предложения?