我已经为温莎城堡创建了一个自动配置实例的工具,除了带有拦截器的类型之外,它工作得很好!在这种情况下,不会触发 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,因此它在 Implementation 属性中拥有未经代理的类型!我的固定代码如下所示:
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);
}