I\'m using ASP.NET Core, and its builtin DI container. I\'m using a third-party library (NLog) which I can\'t change.
My Foo
class has a dependency (by
Addendum to @CodeCaster's excellent solution.
It's important to change Func
to Func
. Otherwise the container won't return new instances each time, even though you're using a delegate factory.
Probably has something to do with the fact that a long-lived component (singleton) depends on a short-lived component (per-transaction). The Func<>
prevents the captive dependency bug, but for the factory to also give you new instances each time, it needs to be Owned<>
.
I don't understand why, and it seems counter-intuitive, but that's how it works.