On Wed, Jul 24, 2024, at 16:13, Rob Landers wrote:
> On Wed, Jul 24, 2024, at 16:02, Larry Garfield wrote:
>> On Thu, Jul 18, 2024, at 7:12 AM, Nicolas Grekas wrote:
>> 
>> >> Otherwise, I'm quite looking forward to this.
>> >
>> > 🤞
>> 
>> Another thought that occurred to me.  Given how lightweight it *looks* to be 
>> (may not actually be, but looks it), how much overhead would there be to 
>> having a compiled DI container that is lazy by default?  Just make 
>> everything lazy with a fairly standard initializer or factory, unless a 
>> specific case says you shouldn't.  That way you can use optional 
>> dependencies in a constructor pretty much at will with no overhead of 
>> needing to create a chain of dependencies as a result.
>> 
>> Would that be a bad idea for some reason, or would it actually work?
>> 
>> (This doesn't really affect my vote, more just a thought that came up.)
>> 
>> --Larry Garfield
>> 
> 
> I'm not convinced a DI container is possible at all with this implementation, 
> see "surprising behaviors."
> 
> When you are building a DI container, you usually have *absolutely no idea* 
> what a user will return from a proxy. At most, you might know they are 
> returning SomeInterface or SomeBaseClass, but the user might return 
> MyFancyClass that implements the interface or base class, which isn't allowed 
> via this implementation. The type must be exactly the same or a parent class:
> 
>> the factory of a lazy proxy is allowed to return an instance of the same 
>> class as the proxy, or of a parent class.
>> 
>> Returning an instance of a sub-class is not allowed
> 
> — Rob

Sorry, misspoke:

> what a user will return from a proxy.

should be "what a user will return from a factory."

— Rob

Reply via email to