Как стать автором
Обновить

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

Ох уж этот DI в .net core. Когда java мир бороздят корабли spring, cdi и guice, .net радуется первой реализации di. Ещё лет через 10 появится аоп? Это же базовые вещи и используются они десятилетиями
Вообще-то говоря, этот DI в коробке с .NetCore идет с первой версии. При этом spring в стандарт как-то не входит. А так, десятилетиями можно было использовать в дотнете всякие Unity или Autofac.
И уж не платформе, где лямбды появились в 2014, равно как и вменяемая работа с датами, предъявлять что-то .Net, где лямбды и LINQ появились в 2007 (Как «приятно» было работать после EF cо спринговым SQL! Этот божественный мапинг ручками!)

Ну и напоследок, на подумать. Где тут .net core, а где spring/java?
www.techempower.com/benchmarks
benchmarksgame-team.pages.debian.net/benchmarksgame/faster/csharp.html
Вы правда думаете, что DI в .NET только появился?
Лет 15 как уже точно есть, как и AOP.
Но спасибо за комментарий. Посмеялся от души.
Фактически мы реализовали паттерн «Декоратор».

Декоратор вроде должен реализовать тот же интерфейс что и декорируемый.
У нас есть ILayer и два реализующих интерфейс класса. Мы можем «подкинуть» в конструктор класс в соответствии с нашими пожеланиями. Как вот в этом примере сделано с SetComponent
Ну так это просто Property/Method Injection, а не декоратор.
Пример декоратора:
public class LoggingLayer : ILayer
{
	private readonly ILogger _logger;

	private readonly ILayer _decorated;

	public LoggingLayer(ILayer decorated, ILogger logger)
	{
		_decorated = decorated;
		_logger = logger;
	}

	public void Write(string text)
	{
		_logger.Log(text);
		_decorated.Write(text);
	}
}
Это Constructor Injection. Дальше в тексте идет указание, что мы в идеале должны получать объект ILayer «свыше», а не создавать с помощью new. А вот какого-то существующего объекта, которому мы добавляем функционал действительно нет. Потому пример не полный. Поправлю формулировку. Благодарю вас за внимательность.

Разве main класс не самый нижний в иерархии?

Меня одно очень беспокоит, после билда dotnet проектов на linux хосте в памяти остаются всякие лишние процессы, почему они не заканчиваются, сами не терминатятся?
Приходится вручную убивать — но это же не гуд, или это обычное дело для MS?
Не знаю так это или нет, но немного не туда вы пожаловались) Пишите на GitHub. Если действительно так, то поправят в следующем релизе (если уже не поправили).
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.