Почему контейнер DI удаляет службу с заданной областью дважды?C#

Место общения программистов C#
Anonymous
Почему контейнер DI удаляет службу с заданной областью дважды?

Сообщение Anonymous »

Услуга:

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

    public interface IMessageWriter
{
void Write(string message);
}

public class ConsoleMessageWriter:IMessageWriter, IDisposable
{
public void Dispose()
{
Console.WriteLine($"The {GetType().Name} instanse is disposed.");
}

public void Write(string message)
{
Console.WriteLine(message);
}
}
Теперь я использую его в области видимости:

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

using DI_Sandbox.Models;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services
.AddScoped()
.AddScoped(provider => provider.GetRequiredService());

var container = services.BuildServiceProvider(validateScopes:true);
using (var serviceScope = container.CreateScope())
{
var messageWriter1 = serviceScope.ServiceProvider.GetRequiredService();
var messageWriter2 = serviceScope.ServiceProvider.GetRequiredService();

Console.WriteLine($"messageWriter1 == messageWriter2: {messageWriter1 == messageWriter2}");

messageWriter1.Write("Hello DI!");
}
Console.Write("THE END");
Выход:

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

messageWriter1 == messageWriter2: True
Hello DI!
The ConsoleMessageWriter instanse is disposed.
The ConsoleMessageWriter instanse is disposed.
THE END
Почему служба с заданной областью была удалена дважды? Как это исправить? Мне нужно удалить службу один раз.

Подробнее здесь: https://stackoverflow.com/questions/784 ... vice-twice

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