StructureMap注入父子关系

本文关键字:父子关系 注入 StructureMap | 更新日期: 2023-09-27 17:48:56

我是StructureMap的新手。对以下问题的任何指导都是感激的。谢谢!

我有一些代码,如:

public interface IFoo
{
    IBar Child { get; }
    void SayIt();
}
public class Foo: IFoo
{
     public IBar Child {get; set;}
     public Foo(string message) {...}
     public void SayIt() {...}
}
public interface IBar
{
    IFoo Parent {get;}
}
public class Bar: IBar
{
    private IFoo parent;
    public IFoo Parent { get {return parent;} }
    public Bar(IFoo parent)
    {
        this.parent = parent;
    }
}

我正在使用以下ObjectFactory构造IFoo

ObjectFactory.Configure(x =>
            {
                var foo = x.For<IFoo>().Use<Foo>();
                //x.For<IBar>().Use<Bar>().Ctor<IFoo>().Is(foo);
                x.SetAllProperties(c =>
                    {
                        c.OfType<IBar>();
                    }
                );
            }
            );

我正在构造foo对象,如:

var foo = ObjectFactory.With<string>("Hello world").GetInstance<IFoo>();

然而,我在配置IFoo的子属性为IBar的实例时遇到了困难,父属性指向我正在创建的实例,例如带有"Hello World"作为消息的实例。我怎样才能做到这一点呢?谢谢!

StructureMap注入父子关系

你不能这样做,因为StructureMap会抛出一个双向依赖异常。大多数像这样的对象图都不属于容器,因为它们是数据对象。例如,xml文档对象