It's a common problem with frameworks. I believe early editions of MVC had the same issue.
I think we added IDisposable support for actors since
which @Horusiath mentions in his answer
not ideal because it's explicit
but still, something
really all three of @Horusiath's strategies are good ones
I thought about using the actor construction pipeline for tackling that, so I'm glad he brought it up
It's probably a problem as well on the JVM side and since Akka.net is based on it that baggage came along with it.
I have no idea how they do DI
The same way. I based my code on the implementation.
well in that case, it's a buyer-beware thing for akka.net
just like akka
and frankly I think that's an ok place to start
as nice as it would be to have automatic scoping for releasing injected resources
might not be feasible atm
What would be nice if we could pass a lambda to the actor system that could be used by the supervisor to release references. Basically that is all that is really needed.
THAT might be doable
depends on what the lambda has to do
if you could put together a little proposal for doing that, @HCanber / @Horusiath / @rogeralsing might have some ideas on how that can be done
It's just has to take the actor reference and call something like release(Actor).
maybe it can get imbedded into Props by the IndirectActorProducer
and the ActorCell can call it on the actor itself during the restart / shutdown
since the ActorCell sits outside of the ActorRef
and the actor instance
so it can still be a self-contained concern
done as part of the Terminate step
Makes sense to me.
If you get that to work you can make the JVM guys jealous. :smile:
I think that would be neat. You should propose it - I think it'd be a popular idea.
If you can point in me in the right direction in the code base I will o just that. It was something I wanted to do the first time but I was not familiar enough with all the inner workings.
Maybe I could use NDepend to help me out with that. It's been something on my back burner for a while and the guy who owns company gave me a free copy and I been meaning to do a blog post on it to repay him for his generosity. I have to sign off but I will start taking a look again and see what can be done. Cheers
@Horusiath Sorry, missed your question. Yes I got started on the CircuitBreaker, as I needed one at work. More important things got in between though, so I haven't finished it. :( I've based mine on Akka's and supports a bit more than yours does (callbacks for example), and I've created a base class so one can add more states (for example the CB is in a BeingInitialized before it's closed for the first time)
Looking at your code, it seems to me that you have a few race conditions. Is your CB intended to be used from inside one actor instance only?
I've already presented my opinion in #706. I think we could build a pipeline plugin for DI frameworks and release disposable resources in it's BeforeIncarnated (it's called just before actor itself is disposed and destroyed/respawned).
@HCanber it's not an Akka specific, I need it for more general purpose works with projects not using Akka. Where do you see possible race conditions?