问题描述
|
我正在温莎城堡使用类型化工厂设施。当工厂方法生成应该创建的实例以连接该实例以进行属性更改通知时,我想获得一个回调。这样,我将不需要确保在调用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。