Ruby dry-rbを使用して登録コンテナを分離するにはどうすればよいですか?
概要
Ruby の初心者が dry-rb gem、特に自動インジェクターを検討するときに、登録コンテナをモジュールとして複数の機能に分割する方法はありますか?
これは私が試してみましたが動作しなかったコードサンプルです。
module SomeFeatureContainter
extend Dry::Container::Mixin
register "some_service" do
SomeService.new
end
end
class Container
extend Dry::Container::Mixin
include SomeFeatureContainter
end
IocResolve = Dry::AutoInject(Container)
解決策
制御の反転を実現するには、インスタンス化されたオブジェクトを通じてサービスを呼び出す前に、コンテナーを定義し、インジェクターを設定します。
require 'dry-auto_inject'
class SomeService
# your service definition
end
module SomeFeatureContainer
extend Dry::Container::Mixin
register 'some_service' do
SomeService.new
end
end
class Container
extend Dry::Container::Mixin
configure { |config| config.auto_inject = true }
include SomeFeatureContainer
# define the injector
IocResolve = Dry::AutoInject(self)
end
class MyClass
include Container::IocResolve[:some_service]
def use_some_service
some_service.call
end
end
# invoke the service with MyClass
my_instance = MyClass.new
my_instance.use_some_service````