Структура карты: проблема регистрации всех типов плюс экземпляр по умолчанию, который объединяет все другие экземпляры - PullRequest
2 голосов
/ 13 января 2011

У меня есть интерфейс:

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> ();
});

но безрезультатно ... Предложения?

...