public IEventTopic GetEventTopic(string topic)
{
if (this.eventTopics.ContainsKey(topic))
{
return this.eventTopics[topic];
}
lock (this)
{
// recheck inside monitor
if (this.eventTopics.ContainsKey(topic))
{
return this.eventTopics[topic];
}
IEventTopic eventTopic = this.factory.CreateEventTopicInternal(topic, this.globalMatchersProvider);
// copy
this.eventTopics = new Dictionary<string, IEventTopic>(this.eventTopics) { { topic, eventTopic } };
this.extensionHost.ForEach(extension => extension.CreatedTopic(eventTopic));
return eventTopic;
}
}