Обновить

Комментарии 5

Будьте внимательны.

А давайте. Возьмите вот такой код:

var services = new ServiceCollection();
services.AddTransient<IFoo, Foo>();
services.AddTransient<Lazy<IFoo>>();

using var sp = services.BuildServiceProvider();
var foo = sp.GetRequiredService<Lazy<IFoo>>();
Console.WriteLine(foo.IsValueCreated);

interface IFoo;
class Foo : IFoo;

Что будет выведено в консоль? Почему True? ;)

Это собеседование?

Я думаю, зависит от того как реализовано свойство IsValueCreated и каким образом ServiceProvider инжектит оборачиваемый объект в Lazy. Угадал?

Какой приз мне полагается?

Это я пытаюсь намекнуть на то, что ленивой инициализации в вашем примере не происходит, всё дерево по-прежнему резолвится целиком, даже несмотря на то, что вы что-то где-то обернули в Lazy. И предлагаю подумать, почему так происходит.

Значит ServiceProvider резолвит зависимость из контейнера прежде чем вставить в Lazy :)

Щас статью поправлю :)

Спасибо за тестирование.

Поправил.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации