BasicUsage
Owned SkeinApplication, lazy singletons, factories, assisted factories, and a typed scope.
Run: swift run --package-path Examples BasicUsage
import Skein
let applicationModule = module {
// Created lazily on the first resolution, then reused.
single(Logger.self, using: Logger.init)
// Created again for each resolution.
factory(RequestHandler.self, using: RequestHandler.init)
// Assisted factories accept one strongly typed runtime value.
factory(RequestPresenter.self, arguments: RequestPath.self, using: RequestPresenter.init)
// Scoped values are shared only by one typed scope instance.
scoped(RequestCache.self, scope: RequestScope.self, provider: { _ in RequestCache() })
}
do {
let application = try SkeinApplication {
applicationModule
}
let firstLogger: Logger = try application.get()
let secondLogger: Logger = try application.get()
print("Singleton reused: \(firstLogger === secondLogger)")
let firstHandler: RequestHandler = try application.get()
let secondHandler: RequestHandler = try application.get()
print("Factory creates new values: \(firstHandler !== secondHandler)")
print("Nested singleton reused: \(firstHandler.logger === secondHandler.logger)")
firstHandler.handle("/examples")
let presenter: RequestPresenter = try application.get(
arguments: RequestPath(value: "/examples")
)
print("Assisted path: \(presenter.path.value)")
let scope = try application.createScope(RequestScope.self, id: "example")
let firstCache: RequestCache = try scope.get()
let secondCache: RequestCache = try scope.get()
print("Scoped cache reused: \(firstCache === secondCache)")
} catch {
print("Skein setup or resolution failed: \(error)")
}