Castle Windsor: событие созданное компонентом с перехватчиком - PullRequest
0 голосов
/ 19 января 2012

Я создал для Castle Windsor средство автоматической настройки экземпляра, он отлично работает, за исключением типа с перехватчиком!В этом случае событие ComponentCreated не срабатывает, и я не могу настроить свой экземпляр, как я могу перехватить создание прокси-класса?Это мой код объекта:

_conf = this.Kernel.Resolve<Configuration>();

        this.Kernel.ComponentCreated += (s, o) =>
        {
            //Subscribe the every IHandler to the caliburn micro event aggregator
            if (typeof(IHandle).IsAssignableFrom(o.GetType()))
                Kernel.Resolve<IEventAggregator>().Subscribe(o);

            var attr = o.GetType().GetCustomAttributes(false).OfType<ConfigurableAttribute>().FirstOrDefault();
            SettingsCollection setter = null;
            if (attr != default(ConfigurableAttribute) && (setter = _conf.GetSettings(attr.Name)) != null)
                setter.Set(o);
        };

Решение

параметр события ComponentCreated "s" - это ComponentModel, поэтому он содержит незафиксированный тип в свойстве реализации!Мой фиксированный код выглядит так:

this.Kernel.ComponentCreated += (s, o) =>
  {
    var attr = o.GetType().GetCustomAttributes(false).OfType<ConfigurableAttribute>().FirstOrDefault();
    SettingsCollection setter = null;
    if(attr != default(ConfigurableAttribute) && (setter = _conf.GetSettings(attr.Name)) != null)
      setter.Set(o);
  }
...