The service:
<code> 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);
}
}
</code>
<code> 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);
}
}
</code>
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);
}
}
Now I use it in a scope:
<code>using DI_Sandbox.Models;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services
.AddScoped<ConsoleMessageWriter>()
.AddScoped<IMessageWriter>(provider => provider.GetRequiredService<ConsoleMessageWriter>());
var container = services.BuildServiceProvider(validateScopes:true);
using (var serviceScope = container.CreateScope())
{
var messageWriter1 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
var messageWriter2 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
Console.WriteLine($"messageWriter1 == messageWriter2: {messageWriter1 == messageWriter2}");
messageWriter1.Write("Hello DI!");
}
Console.Write("THE END");
</code>
<code>using DI_Sandbox.Models;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services
.AddScoped<ConsoleMessageWriter>()
.AddScoped<IMessageWriter>(provider => provider.GetRequiredService<ConsoleMessageWriter>());
var container = services.BuildServiceProvider(validateScopes:true);
using (var serviceScope = container.CreateScope())
{
var messageWriter1 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
var messageWriter2 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
Console.WriteLine($"messageWriter1 == messageWriter2: {messageWriter1 == messageWriter2}");
messageWriter1.Write("Hello DI!");
}
Console.Write("THE END");
</code>
using DI_Sandbox.Models;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services
.AddScoped<ConsoleMessageWriter>()
.AddScoped<IMessageWriter>(provider => provider.GetRequiredService<ConsoleMessageWriter>());
var container = services.BuildServiceProvider(validateScopes:true);
using (var serviceScope = container.CreateScope())
{
var messageWriter1 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
var messageWriter2 = serviceScope.ServiceProvider.GetRequiredService<IMessageWriter>();
Console.WriteLine($"messageWriter1 == messageWriter2: {messageWriter1 == messageWriter2}");
messageWriter1.Write("Hello DI!");
}
Console.Write("THE END");
The output:
<code>messageWriter1 == messageWriter2: True
Hello DI!
The ConsoleMessageWriter instanse is disposed.
The ConsoleMessageWriter instanse is disposed.
THE END
</code>
<code>messageWriter1 == messageWriter2: True
Hello DI!
The ConsoleMessageWriter instanse is disposed.
The ConsoleMessageWriter instanse is disposed.
THE END
</code>
messageWriter1 == messageWriter2: True
Hello DI!
The ConsoleMessageWriter instanse is disposed.
The ConsoleMessageWriter instanse is disposed.
THE END
Why the service was disposed twice? How to fix it? I need dispose the service once.