インスタンスを自動構成するキャッスルウィンザー用の機能を作成しました。インターセプターを使用するタイプを除いて、うまく機能します! その場合、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);
}