Шаблон декоратора с DIC#

Место общения программистов C#
Anonymous
Шаблон декоратора с DI

Сообщение Anonymous »

Я изучаю шаблоны проектирования и наткнулся на шаблон «Декоратор». Я провел исследование и реализовал рабочую версию.

Код: Выделить всё

public interface IWriter{
void Write(string text);
}

public class ConsoleWriter : IWriter{
public void Write(string text){
Console.WriteLine(text);
}
}

public class ConsoleWriterDecorator : IWriter{
private IWriter _writer;

public ConsoleWriterDecorator(IWriter writer){
_writer = writer;
}

public void Write(string text){
text = "Hello, Im decorator - " + text;
_writer.Write(text);
}
}

public void Main(string args[]){
IWriter consoleWriter = new ConsoleWriter();
IWriter decor = new ConsoleWriterDecorator(consoleWriter);
decor.Write("Pootis");
}
Однако я не уверен, насколько подходит внедрение зависимостей. Если бы я использовал DI-контейнер, я бы добавил такие зависимости:

Код: Выделить всё

services.AddTransient();
services.AddTransient();
Но каждый раз, когда я вызываю GetRequiredService();, возвращается IEnumerable, что имеет смысл. Он отлично работает с шаблоном стратегии, но я понятия не имею, как он сюда подходит. Но как мне тогда использовать декоратор с DI-контейнером? Я пытался найти решения, но в большинстве сообщений в блогах, которые я видел, тема внедрения зависимостей тихо опускалась. Я также пробовал использовать это:

Код: Выделить всё

AddTransient(x => {
IWriter consoleWriter = x.GetReqiuredService();
IWriter decor = new ConsoleWriterDecorator(consoleWriter);
return decor;
});
Но опять же, поскольку внутри лямбды есть еще один GetRequiredService, это тоже бесполезно. Более того, что, если ConsoleWriterDecorator или ConsoleWriter имеют другие зависимости? Что, если я добавлю больше декораторов? Это один из тех шаблонов проектирования, которые не поддерживают внедрение внедрения, или я просто не могу найти решение?
Заранее спасибо!

Вернуться в «C#»