如何解决如何在Castle Windsor的Typed Factory Facility工厂方法中添加拦截器
| 我正在温莎城堡使用类型化工厂设施。当工厂方法生成应该创建的实例以连接该实例以进行属性更改通知时,我想获得一个回调。这样,我将不需要确保在调用factory方法后调用此“创建后”步骤,而无需将此责任交给工厂。 有没有办法使用类型化工厂工具或某些其他Castle功能在生成的工厂上注册回调,或者在工厂上创建用于执行回调的拦截器?解决方法
您可以通过从AbstractFacility派生创建Facility来解决此问题。注册到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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。