コード例 #1
0
 /// <summary>
 /// Make the rest of the message handler chain a Weak Reference.
 /// This means that this message handler chain will not prevent the handler from being garbage collected. If the handler is garbage collected, the subscription will be disposed the next time a message passes through.
 /// </summary>
 /// <typeparam name="TMessageType">The message type</typeparam>
 /// <param name="chainBuilder">The builder</param>
 /// <param name="handler">The object to monitor for garbage collection</param>
 /// <param name="weakReferenceGarbageCollector">A weak reference garbage collector</param>
 /// <returns>The builder</returns>
 public static IChainBuilder <TMessageType> WeakReference <TMessageType>(
     this IChainBuilder <TMessageType> chainBuilder,
     IMessageHandler <TMessageType> handler,
     IWeakReferenceGarbageCollector weakReferenceGarbageCollector)
 {
     chainBuilder.Handle(services => new WeakReferenceDecorator <TMessageType>(handler, services.BuilderNotifier, weakReferenceGarbageCollector).HandleMessageAsync);
     return(chainBuilder);
 }
コード例 #2
0
 public WeakReferenceDecorator(
     IMessageHandler <TMessageType> handler,
     IChainBuilderNotifier builderNotifier,
     IWeakReferenceGarbageCollector weakReferenceGarbageCollector)
 {
     this.weakReferenceMessageHandler = new WeakReference <IMessageHandler <TMessageType> >(handler);
     builderNotifier.AddNotification(chain => this.chain = chain);
     weakReferenceGarbageCollector?.Add(this);
 }