container.cr 0.3.1
Container.cr
Simple and small DI Container.
Installation
-
Add the dependency to your
shard.yml
:dependencies: radbas-container: github: radbas/container.cr
-
Run
shards install
Usage
Extend the abstract Radbas::Container
class and register/autowire your services:
require "radbas-container"
class MyService
def initialize(
@dep: DependencyService
); end
end
class MyContainer < Radbas::Container
# autowire does let you register namespaces
# from which classes get resolved automatically
autowire(MyApp, CustomNamespace)
# softmap registers all subclasses of a given abstract class
softmap(MyAbstractClass, params: {}, public: false)
# register a single service
register(DependencyService)
# a factory can be used for setup
register(MyService, factory: ->{
# you can call get inside a factory to resolve dependencies
MyService.new(get(DependencyService))
}, public: true)
# params can be used to configure constructor params
register(MyService, params: { dep: get(DependencyService) })
end
By default, all registered services are private
. Normally you would register a single class as a public
entrypoint and call get
on the container:
class MyContainer < Radbas::Container
register(MyApplication, public: true)
end
container = MyContainer.new
app = container.get(MyApplication)
app.run
# ...
Contributing
- Fork it (https://github.com/radbas/container/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Contributors
- Johannes Rabausch - creator and maintainer
Repository
container.cr
Owner
Statistic
- 0
- 0
- 0
- 0
- 1
- 12 days ago
- July 16, 2023
License
MIT License
Links
Synced at
Tue, 04 Feb 2025 11:47:26 GMT
Languages