Castle Windsor Dependency Injection - восстановить зависимости для существующего экземпляра - PullRequest
1 голос
/ 08 ноября 2010

У меня есть довольно простой сценарий, который я пытаюсь решить, но я бью несколько кирпичных стен Виндзором - возможно, я пытаюсь решить проблему неправильно?

У меня естьтип с именем 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.

Затем мне нужно десериализовать объект и вернуть его в прежнее состояние.,Как мне добиться этого с Виндзорским замком?У меня уже есть экземпляр, просто отсутствуют его зависимости.

Если бы я использовал Unity, я бы использовал BuildUp () для решения проблемы, но в этом случае я хочу использовать Castle Windsor.

1 Ответ

2 голосов
/ 08 ноября 2010

Кажется, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...