README.md in smart_injection-0.0.0.alpha3 vs README.md in smart_injection-0.0.0

- old
+ new

@@ -1,29 +1,9 @@ # SmartCore::Injection · [![Gem Version](https://badge.fury.io/rb/smart_injection.svg)](https://badge.fury.io/rb/smart_injection) [![Build Status](https://travis-ci.org/smart-rb/smart_injection.svg?branch=master)](https://travis-ci.org/smart-rb/smart_injection) Dependency injection principles and idioms realized in scope of Ruby. ---- - -## Major Features - -- `method-injection` strategy -- `soon:` constructor injection strategy; -- `soon:` property injection strategy; -- realized as a mixin; -- instance-method dependency injection; -- class-method dependency injection; -- multiple IoC-container registration; -- static and dynamic bindings; -- support for memoization with run-time dependency-switchable re-memoization; -- an ability to import dependencies from the list of IoC-containers -- an ability to import from the pre-configured default IoC-container(s); -- an ability to import from any manually passed IoC-container; -- privacy control of injected dependency (public/private/protected); - ---- - ## Installation ```ruby gem 'smart_injection' ``` @@ -34,74 +14,9 @@ gem install smart_injection ``` ```ruby require 'smart_core/injection' -``` - ---- - -## Synopsis - -Create some containers: - -```ruby -AppContainer = SmartCore::Container.define do - namespace(:data_storage) do - register(:main) { Sequel::Model.db } - register(:cache) { Redis.new } - end -end - -ServiceContainer = SmartCore::Container.define do - namespace(:rands) do - register(:alphanum) { -> { SeureRandom.alphanumeric } } - register(:hex) { -> { SecureRandom.hex } } - end -end - -GlobalContainer = SmartCore::Container.define do - namespace(:phone_clients) do - register(:nexmo) { Nexmo.new } - register(:twilio) { Twilio.new } - end -end -``` - -And work with dependency injection: - -```ruby -class MiniService - include SmartCore::Injection - - register_container(AppContainer) - register_container(ServiceContainer) - - # --- or --- - include SmartCore::Injection(AppContainer, ServiceContainer) - - # --- or --- - include SmartCore::Injection - register_container(AppContainer, ServiceContainer) - - # import dependencies to an instance - import({ db: 'data_storage.main' }, bind: :dynamic, access: :private) - import({ rnd: 'rands.alphanum' }, bind: :static, memoize: true) - - # import dependencies to a class - import_static({ cache: 'data_storage.cache', hexer: 'rands.hex' }, bind: :static) - - # import from a non-registered container - import({ phone_client: 'phone_clients.nexmo' }, from: GlobalContainer) - - def call - db # => returns data_storage.main - rnd # => returns rands.alphanum - self.class.cache # => returns data_storage.cache - self.class.hexer # => returns rands.hexer - phone_client # => returns phone_clients.nexmo - end -end ``` --- ## Contributing