refactor: aggiunta documentazione sull'architettura e varie migliorie qua e là
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
// The [sl] package has two main concepts, the [ServiceLocator] itself is the main object that one should pass around through the application. A [ServiceLocator] has a list of slots that can be filled with [InjectLazy] and [InjectValue] and retrieved with [Use]. As slots should be unique they can only be created with the [NewSlot] function.
|
||||
//
|
||||
// The usual way to use this module is to make slots for go interfaces and then pass implementations using the [InjectValue] and [InjectLazy] functions.
|
||||
//
|
||||
// Services can be of various types:
|
||||
// - a service with no dependencies can be directly injected inside a ServiceLocator using [InjectValue].
|
||||
// - a service with dependencies on other service should use [InjectLazy]. This lets the service to initialize itself when required and makes the developer not think the topological sort to put onto the DAG of service dependencies.
|
||||
// - a service can also be private, in this case the slot for a service should be a private field in the service package. This kind of services should also provide a way to inject them into a ServiceLocator.
|
||||
// - a package also just provide a slot. This is useful for using the ServiceLocator to easily pass around values, effectively threating slots just as dynamically scoped variables.
|
||||
package sl
|
||||
|
||||
import (
|
||||
@@ -12,7 +18,7 @@ import (
|
||||
// Logger is the debug logger, in the future this will be disabled and discard by default.
|
||||
//
|
||||
// As this is the service locator module it was meaning less to pass this through the ServiceLocator itself (without making the whole module more complex)
|
||||
var Logger *log.Logger = log.New(os.Stderr, "[sl]", log.LstdFlags)
|
||||
var Logger *log.Logger = log.New(os.Stderr, "[sl] ", log.Lmsgprefix)
|
||||
|
||||
// slot is just a "typed" unique "symbol".
|
||||
type slot[T any] *struct{}
|
||||
|
||||
Reference in New Issue
Block a user