using Microsoft.Extensions.DependencyInjection;
using System;
namespace 杨中科教程
{
internal class Program
{
static void Main(string[] args)
{
TransientTest();
ScopeTest();
ScopeTest2();
}
public static void TransientTest()
{
ServiceCollection services = new ServiceCollection();
//瞬时
services.AddTransient<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test t = scope.GetRequiredService<Test>();
t.SayHi();
Test t1 = scope.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
public static void ScopeTest()
{
ServiceCollection services = new ServiceCollection();
//范围
services.AddScoped<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test test2;
using (IServiceScope serviceScope = scope.CreateScope())
{
Test t = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
Test t1 = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
test2 = t1;
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
using (IServiceScope serviceScope = scope.CreateScope())
{
Test t = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, test2));
}
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
public static void ScopeTest2()
{
ServiceCollection services = new ServiceCollection();
//范围
services.AddScoped<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test t = scope.GetRequiredService<Test>();
t.SayHi();
Test t1 = scope.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
}
public class Test : ITest,IDisposable
{
string name;
public void Dispose()
{
Console.WriteLine("aaaaa");
}
public void SayHi()
{
Console.WriteLine($"hello,{name}");
}
}
public interface ITest
{
public void SayHi();
}
}