Replaced Dictionary by ConcurrentDictionary and List by ConcurrentBag in ServiceRegistration to make it thread safe
Use static initializer for singleton instance instead of a locking mechanism to improve performance
Use TryGetValue instead of ContainsKey followed by the [] operator to avoid accessing the Dictionary twice to improve performance