public NodeFactoryId RegisterFactory(NodeFactoryDelegate nodeFactory) { lock (lockObject) { var id = new NodeFactoryId(Guid.NewGuid()); nodeFactories.Add(id, nodeFactory); return id; } }
/// <summary> /// Gets the node associated to a data object, if it exists, otherwise creates a new node for the object and its member recursively. /// </summary> /// <param name="rootObject">The data object.</param> /// <param name="nodeFactoryId">An identifier to the node factory to use to create nodes.</param> /// <returns>The <see cref="IGraphNode"/> associated to the given object.</returns> public IGraphNode GetOrCreateNode(object rootObject, NodeFactoryId nodeFactoryId = default(NodeFactoryId)) { if (rootObject == null) return null; lock (lockObject) { NodeFactoryDelegate nodeFactory; nodeFactories.TryGetValue(nodeFactoryId, out nodeFactory); if (nodeFactory == null) nodeFactory = defaultNodeFactory; return GetOrCreateNode(rootObject, nodeFactory); } }