结构图:注册所有类型的问题加上聚合所有其他实例的默认实例

时间:2011-01-13 16:39:30

标签: .net dependency-injection structuremap

我有一个界面:

public interface IFoo {
    void Foo ():
}

IFoo的一个实现,用于聚合StructureMap扫描注册的所有其他IFoo实例:

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

但无济于事...建议?

0 个答案:

没有答案