Как перехватчик может быть добавлен к заводскому методу фабрики Typed Factory Facility в Castle Windsor - PullRequest
3 голосов
/ 15 апреля 2011

Я использую Типизированное Производственное Средство в Замке Виндзор. Я хочу получить обратный вызов, когда фабричный метод генерирует экземпляр того, что он должен создать, чтобы подключить экземпляр для уведомления об изменении свойства. Таким образом, мне не нужно будет гарантировать, что этот шаг «после создания» вызывается после вызова фабричного метода, вместо этого передавая эту ответственность фабрике.

Есть ли способ, используя средство Typed Factory Facility или какую-либо другую функцию Castle для регистрации обратного вызова на сгенерированной фабрике или создания перехватчика на фабрике, который используется для выполнения обратного вызова?

1 Ответ

0 голосов
/ 02 января 2013

Вы, вероятно, можете решить эту проблему, создав Facility, наследуя от AbstractFacility. Зарегистрируйтесь в событии Kernel.ComponentCreated и проверьте, нуждается ли созданный компонент в уведомлении об изменении свойства. Если это так, зарегистрируйтесь.

Вы можете использовать событие ComponentDestroyed, чтобы убедиться, что вы также успешно отменили регистрацию. Ниже фрагмента кода, который я использую для автоматической регистрации моделей представления с помощью агрегатора событий Caliburn.Micro

class EventRegistrationFacility : AbstractFacility
{
    private IEventAggregator _eventAggregator;

    protected override void Init()
    {
        Kernel.ComponentCreated += ComponentCreated;
        Kernel.ComponentDestroyed += ComponentDestroyed;
    }

    void ComponentCreated(Castle.Core.ComponentModel model, object instance)
    {
        if (!(instance is IHandle)) return;
        if (_eventAggregator == null) _eventAggregator = Kernel.Resolve<IEventAggregator>();
        _eventAggregator.Subscribe(instance);
    }

    void ComponentDestroyed(Castle.Core.ComponentModel model, object instance)
    {
        if (!(instance is IHandle)) return;
        if (_eventAggregator == null) return;
        _eventAggregator.Unsubscribe(instance);
    }

}

С уважением, Marwijn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...