Castle Windsor依赖注入 - 恢复现有实例的依赖关系

时间:2010-11-08 20:24:36

标签: c# dependency-injection castle-windsor

我有一个相当直接的场景,我正试图解决,但我正在与温莎打几个砖墙 - 也许我试图以错误的方式解决问题?

我有一个名为Foo的类型如下:

public class Foo
{
    [NonSerialized]
    private IBar bar;

    public IBar Bar
    {
        get { return this.bar; }
        set { this.bar = value; }
    }

    public Foo(IBar bar)
    {
    }
}

我以正常方式通过容器实例化:

var myFoo = container.Resolve<Foo>();

依赖关系IBar向容器注册,并在创建对象时解析。既然已经创建了类型,我需要序列化它,我不想序列化IBar,因此它标有NonSerialized属性。

然后我需要对对象进行反序列化并将其返回到以前的状态。我如何通过Castle Windsor实现这一目标?我已经有了一个实例,它只是缺少它的依赖项。

如果我使用Unity,我会使用BuildUp()来解决问题,但我想在这种情况下使用Castle Windsor。

1 个答案:

答案 0 :(得分:2)

似乎Foo有多个问题。尝试通过为数据创建新类来将数据部分与行为分开,并将其用作Foo类中的属性:

[Serializable]
public class FooData
{
}

public class Foo
{
    private FooData data = new FooData();

    public IBar Bar { get; private set; }

    public FooData Data { get; set; }

    public Foo(IBar bar)
    {
    }
}

如果您拥有此构造,则可以反序列化FooData并在创建的Foo中使用它:

var foo = container.Get<Foo>();
foo.Data = DeserializeData();
相关问题