Почему контейнер 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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