Combining dependency injection with service locator

141 Views Asked by At

In the following example, a service locator is used to inject dependencies over classes. Is that in any way better approach than resolving dependencies within the class and keep the initialiser (or class interface) clean?

class MyClass {
    let service: Service
    init(service: Service) {
        self.service = service
    }
}

class RootClass {
    func something() {
        let myClass = MyClass(service: ServiceLocator.shared.resolve())
    }
}
1

There are 1 best solutions below

0
Hemanth S On

This is one of the way to register and inject

// Register a class 
locator.registerFactory(() => Service());

class Service {}

class MyClass {
  final Service service;

  MyClass({this.service});
 }

class RootClass {
 void something() {

  final myClass = MyClass(service: locator.get());
 }

}