 //
 
 import UIKit
+import NetworkingServiceKit
 
 open class NetworkingServiceLocator: NSObject {
     
-    private static let shared:NetworkingServiceLocator = NetworkingServiceLocator()
+    /// Defines a private singleton, all interactions should be done through static methods
+    private static var shared:NetworkingServiceLocator = NetworkingServiceLocator()
     
     private var currentServices:[String:AbstractService]
     private var loadedServiceTypes:[AbstractService.Type]

    private var token:APIToken?
    private var networkManager:NetworkManager
    
    private override init() {
        self.currentServices = [String:AbstractService]()
        self.loadedServiceTypes = [AbstractService.Type]()
        self.configuration = APIConfiguration.current!
        self.networkManager = AlamoNetworkManager(with: self.configuration)
    }
    
    open class func loadDefaultServices()
    {
        let defaultServices = [AuthenticationService.self]
        NetworkingServiceLocator.load(withServices: defaultServices)
    }
    
    open class func load(withServices serviceTypes:[AbstractService.Type])
    {
        NetworkingServiceLocator.shared.loadedServiceTypes = serviceTypes

        }
    }
    
    
    /// Returns a service for a specific type
    ///
    /// - Parameter type: type of service
    /// - Returns: service object
    open class func service<T : AbstractService>(forType type: T.Type) -> T?
    {
        if let service = NetworkingServiceLocator.shared.currentServices[String(describing: type.self)] as? T {
