I’m using dry-system to sort out dependencies for a Sinatra app (and stub them out in my tests).
Unfortunately – to the best of my understanding of my current situation, I’ll be so happy to be wrong here
– a Sinatra app is a singleton. In my case Deps is a subclass of Dry::System::Container and I
include Deps.injector['foo']
in my Sinatra app.
In my testing suite separate tests do their own Deps.stub('foo', fake(Foo)) / Deps.unstub dances; unfortunately the app (being a singleton with memoized foo result) only ever tries to opearate on the first test’s fake – the tests pass in insolation and break when ran together.
I think this is a memoization issue, because adding the below to my app solves the problem:
def foo
Deps['foo']
end
– in this case the proper fakes are being fetched.
Is there an option I can pass through to dry-auto_inject to stop it from memoizing, but rather make proper Deps['foo'] calls on every foo call?